Как скрыть нижнюю панель в EditText
Как я могу скрыть нижнюю панель EditText (строка приглашения с небольшими засечками на концах)?
там может быть лучший способ сделать то, что я хочу: у меня есть макет с EditText. Обычно это отображается нормально, когда пользователь может нажать на него и начать ввод или редактирование текста.
Иногда, однако, я хотел бы использовать тот же макет (упрощает другую логику) для отображения одних и тех же данных только для чтения. Я хочу, чтобы презентация была похожа - она должна иметь та же высота и тот же шрифт, но не имеют нижней панели.
в качестве меры stop-gap я собираюсь реализовать это, удалив EditText и заменив TextView. Я думаю, что это даст желаемые результаты, но это похоже на окольный путь дорогой способ сделать что-то, что должно быть легко сделать, изменив атрибуты.
14 ответов:
вы можете установить
EditTextчтобы иметь пользовательский прозрачный drawable или просто использоватьandroid:background="@android:color/transparent"или
android:background="@null"
вы можете установить
EditText' sbackgroundTintзначение определенного цвета. Если вы установите прозрачный цвет, нижняя панель должна исчезнуть.
android:backgroundTint="@color/Transparent"
<color name="Transparent">#00000000</color>но вы можете использовать его в
Api v21(Lollipop)или выше
Вы можете сделать это программно с помощью
setBackgroundResource:editText.setBackgroundResource(android.R.color.transparent);
используя любое свойство:
android:background="@null"или
android:background="@android:color/transparent"работал для меня, чтобы скрыть подчеркивание EditText.
однако обратите внимание, что это затем вызывает проблему с интервалом с TextInputLayout, который я окружаю
EditText
то, что я сделал, это создать фигуру drawable и установить ее в качестве фона:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <padding android:top="8dp" android:bottom="8dp" android:left="8dp" android:right="8dp" /> <solid android:color="#fff" /> </shape>Примечание: я на самом деле использовать
@dimenи@colorзначения для firelds, но я упростил файл формы здесь для ясности.
вот способ скрыть его, не разрушая заполнение по умолчанию:
fun View.setViewBackgroundWithoutResettingPadding(background: Drawable?) { val paddingBottom = this.paddingBottom val paddingStart = ViewCompat.getPaddingStart(this) val paddingEnd = ViewCompat.getPaddingEnd(this) val paddingTop = this.paddingTop ViewCompat.setBackground(this, background) ViewCompat.setPaddingRelative(this, paddingStart, paddingTop, paddingEnd, paddingBottom) }использование:
editText.setViewBackgroundWithoutResettingPadding(null)
вы также должны установить minWidth, иначе курсор исчезнет, если текст пуст.
<EditText android:id="@+id/et_card_view_list_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:minWidth="30dp" android:layout_weight="1" android:inputType="text" android:text="Name" android:background="@android:color/transparent" />
если ваш текст редактирования уже имеет фон, то вы можете использовать следующее.
android:textCursorDrawable="@null"
я обнаружил самую любопытную вещь! Если вы установите его в
nullиспользование привязки данных:android:background="@{null}"тогда не только фон удаляется, но вид по-прежнему имеет заполнение, которое было вычислено из фона по умолчанию. Поэтому по какой-то причине отложенный параметр null не очищает заполнение от предыдущего bg..? Заполнение на виде-левый / верхний / правый 4dp, Нижний 13dp (от уровня эмулятора 21).
может не иметь одинаковый конечный результат на всех уровнях API, поэтому Берегись! Кто-нибудь скажите мне, если вы проверите это и найдете его надежным. (Также обратите внимание, что нижняя прокладка торчит из-за этого подчеркивания, которое было в оригинале. Поэтому вы, вероятно, захотите изменить его в XML или сбросить его в коде после того, как он будет загружен на равную вершину...
вы также можете определить стиль для вашего editText, так что вы можете перегруппировать все свойства В общем. Это очень мощный, если у вас есть несколько редактировать текст, который должен иметь поведение
поместите код в res / values / styles.xml
<style name="MyEditTextStyle" parent="@android:style/TextAppearance.Widget.EditText"> <item name="android:background">@color/transparence</item> //NO UNDERBAR <item name="android:maxLines">1</item> <item name="android:height">28dp</item> //COMMON HEIGHT </style>после этого вам просто нужно вызвать его в вашем editText
<EditText android:id="@+id/edit1" style="@style/MyEditTextStyle" android:layout_width="match_parent" android:layout_height="wrap_content" /> <EditText android:id="@+id/edit2" style="@style/MyEditTextStyle" android:layout_width="match_parent" android:layout_height="wrap_content" />
Если вы хотите, чтобы это повлияло на все экземпляры EditText и любой класс, который наследует от него, то вы должны установить в своей теме значение атрибута editTextBackground.
<item name="android:editTextBackground">@drawable/bg_no_underline</item>пример drawable я использую:
<inset xmlns:android="http://schemas.android.com/apk/res/android" android:insetLeft="@dimen/abc_edit_text_inset_horizontal_material" android:insetRight="@dimen/abc_edit_text_inset_horizontal_material" android:insetTop="@dimen/abc_edit_text_inset_top_material" android:insetBottom="@dimen/abc_edit_text_inset_bottom_material"> <selector> <item android:drawable="@android:color/transparent"/> </selector> </inset>это немного измененная версия того, что реализация material design по умолчанию.
при применении он сделает все ваши EditText удалить подчеркивание по всему приложению, и вам не нужно применять стиль для каждого и каждого вручную.
у меня есть что-то вроде этого, что очень и очень полезно:
generalEditText.getBackground().mutate().setColorFilter(getResources().getColor(R.color.white), PorterDuff.Mode.SRC_ATOP);где generalEditText - это мой EditText, а цвет белый:
<color name="white">#ffffff</color>это не удалит заполнение, и ваш EditText останется как есть. Только линия внизу будет удалена. Иногда это более полезно сделать так.
Если вы используете
android:background="@null"как многие предположили, вы теряете заполнение и EditText становится меньше. По крайней мере, это был мой случай.немного стороне Примечание. Если вы установите значение background null и попробуете код java, который я предоставил выше, ваше приложение рухнет сразу после его выполнения. (потому что он получает фон, но он равен нулю.) Это может быть очевидно, но я думаю, что указание на это важно.
Comments