Ответ 1
Вы можете установить EditText
чтобы иметь настраиваемый прозрачный рисунок или просто использовать
android:background="@android:color/transparent"
или же
android:background="@null"
Как я могу скрыть строку с надписью EditText (строка подсказки с маленькими засечками на концах)?
Может быть лучший способ сделать то, что я хочу: у меня есть макет с EditText. Обычно это хорошо отображается, когда пользователь может нажать на него и начать ввод или редактирование текста.
Однако иногда я хотел бы использовать одну и ту же компоновку (упрощает другую логику) для отображения тех же данных только для чтения. Я хочу, чтобы презентация была похожей - она должна иметь одинаковую высоту и одинаковый шрифт, но не иметь подчеркивания.
В качестве меры ограничения я собираюсь реализовать это, удалив EditText и заменив TextView. Я думаю, что это даст желаемые результаты, но кажется, что это обходной путь, дорогой способ сделать что-то, что должно быть легко сделать путем изменения атрибутов.
Вы можете установить EditText
чтобы иметь настраиваемый прозрачный рисунок или просто использовать
android:background="@android:color/transparent"
или же
android:background="@null"
Установите фон в значение null.
android:background="@null"
Вы можете установить значение EditText
backgroundTint
для определенного цвета.
Если вы установите прозрачный цвет, нижний план должен исчезнуть.
android:backgroundTint="@color/Transparent"
<color name="Transparent">#00000000</color>
Но вы можете использовать это в Api v21(Lollipop)
или выше
Установите фон edittext как
android:background="#00000000"
Он будет работать.
Вы можете сделать это программно, используя setBackgroundResource
:
editText.setBackgroundResource(android.R.color.transparent);
Используя любое свойство:
android:background="@null"
ИЛИ ЖЕ
android:background="@android:color/transparent"
работал для меня, чтобы скрыть подчеркивание EditText.
Тем не менее, обратите внимание, что тогда это вызывает проблему пробелов с TextInputLayout, который я EditText
То, что я сделал, это создать фигуру с возможностью рисования и установить ее как фон:
<?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"
У меня есть что-то вроде этого, что очень очень полезно:
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 станет меньше. По крайней мере, это был мой случай.
Небольшое замечание: если вы установите фоновый ноль и попробуете код Java, который я предоставил выше, ваше приложение вылетит сразу после его выполнения. (потому что он получает фон, но он нулевой.) Это может быть очевидно, но я думаю, что указывать это важно.
Я обнаружил самую любопытную вещь! Если вы установите значение null
с помощью привязки данных:
android:background="@{null}"
Затем удаляется не только фоновый фон, но в представлении по-прежнему есть отступы, которые были рассчитаны на фоне по умолчанию. Поэтому по какой-то причине отложенная нулевая настройка не очищает отступ от предыдущего bg..? Наложение на вид - left/top/right 4dp, bottom 13dp (с уровня эмулятора 21).
Может не иметь такой же конечный результат на всех уровнях API, так что будьте осторожны! Кто-то скажет мне, проверяете ли вы это и находите его надежным. (Также обратите внимание, что эта нижняя прокладка торчит из-за того подчеркивания, которое было в оригинале. Таким образом, вы, вероятно, захотите изменить его в XML или reset в коде после его загрузки в равную вершину...
Если вы хотите, чтобы это влияло на все экземпляры 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>
Это слегка измененная версия реализации проекта по умолчанию для материала.
При применении он заставит весь ваш EditText удалить подчеркивание во всем приложении, и вам не нужно будет применять стиль к каждому из них вручную.
Просто используйте это
editText.setBackgroundColor(Color.TRANSPARENT);
Вы также можете определить STYLE для вашего 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.setBackground(null)
Из xml
используйте: android:background="@null"
android:background="@android:color/transparent"
Или же
android:background="@null"
Установить фон на ноль
android:background="@null" in your xml
если вы используете фон, то вы должны использовать этот тег
android:testCursorDrawable="@null"
В моем случае, editText.setBackgroundResource(R.color.transparent);
лучше.
Он не удаляет отступы по умолчанию, просто под панелью.
R.color.transparent = #00000000
В моем случае я использовал пользовательский фон для редактирования текста поэтому установка фона на @null или установка оттенка на прозрачный не было решением для меня так что я сыграл небольшую хитрость, которая очень хорошо сработала для меня, я просто поставил
android:inputType="textVisiblePassword"
и это делает работу довольно хорошо.. это не оптимальное решение, но оно работает