Как скрыть подчеркивание в EditText

Как я могу скрыть строку с надписью EditText (строка подсказки с маленькими засечками на концах)?

Может быть лучший способ сделать то, что я хочу: у меня есть макет с EditText. Обычно это хорошо отображается, когда пользователь может нажать на него и начать ввод или редактирование текста.

Однако иногда я хотел бы использовать одну и ту же компоновку (упрощает другую логику) для отображения тех же данных только для чтения. Я хочу, чтобы презентация была похожей - она должна иметь одинаковую высоту и одинаковый шрифт, но не иметь подчеркивания.

В качестве меры ограничения я собираюсь реализовать это, удалив EditText и заменив TextView. Я думаю, что это даст желаемые результаты, но кажется, что это обходной путь, дорогой способ сделать что-то, что должно быть легко сделать путем изменения атрибутов.

Ответ 1

Вы можете установить EditText чтобы иметь настраиваемый прозрачный рисунок или просто использовать

android:background="@android:color/transparent"

или же

android:background="@null"

Ответ 2

Установите фон в значение null.

android:background="@null"

Ответ 3

Вы можете установить значение EditText backgroundTint для определенного цвета. Если вы установите прозрачный цвет, нижний план должен исчезнуть.

android:backgroundTint="@color/Transparent"

<color name="Transparent">#00000000</color>

Но вы можете использовать это в Api v21(Lollipop) или выше

Ответ 4

Установите фон edittext как

android:background="#00000000"

Он будет работать.

Ответ 5

Вы можете сделать это программно, используя setBackgroundResource:

editText.setBackgroundResource(android.R.color.transparent);

Ответ 6

Используя любое свойство:

android:background="@null"

ИЛИ ЖЕ

android:background="@android:color/transparent"

работал для меня, чтобы скрыть подчеркивание EditText.

Тем не менее, обратите внимание, что тогда это вызывает проблему пробелов с TextInputLayout, который я EditText

Ответ 7

То, что я сделал, это создать фигуру с возможностью рисования и установить ее как фон:

<?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, но я упростил файл формы здесь для ясности.

Ответ 8

Вот способ скрыть это, не разрушая отступы по умолчанию:

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)

Ответ 9

Вы также должны установить 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"
            />

Ответ 10

если в тексте редактирования уже есть фон, вы можете использовать следующее.

android:textCursorDrawable="@null"

Ответ 11

У меня есть что-то вроде этого, что очень очень полезно:

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, который я предоставил выше, ваше приложение вылетит сразу после его выполнения. (потому что он получает фон, но он нулевой.) Это может быть очевидно, но я думаю, что указывать это важно.

Ответ 12

Я обнаружил самую любопытную вещь! Если вы установите значение null с помощью привязки данных: android:background="@{null}"

Затем удаляется не только фоновый фон, но в представлении по-прежнему есть отступы, которые были рассчитаны на фоне по умолчанию. Поэтому по какой-то причине отложенная нулевая настройка не очищает отступ от предыдущего bg..? Наложение на вид - left/top/right 4dp, bottom 13dp (с уровня эмулятора 21).

Может не иметь такой же конечный результат на всех уровнях API, так что будьте осторожны! Кто-то скажет мне, проверяете ли вы это и находите его надежным. (Также обратите внимание, что эта нижняя прокладка торчит из-за того подчеркивания, которое было в оригинале. Таким образом, вы, вероятно, захотите изменить его в XML или reset в коде после его загрузки в равную вершину...

Ответ 13

Если вы хотите, чтобы это влияло на все экземпляры 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 удалить подчеркивание во всем приложении, и вам не нужно будет применять стиль к каждому из них вручную.

Ответ 14

Просто используйте это

 editText.setBackgroundColor(Color.TRANSPARENT);

Ответ 15

Вы также можете определить 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" />

Ответ 16

Программно использовать: editText.setBackground(null)

Из xml используйте: android:background="@null"

Ответ 17

android:background="@android:color/transparent"

Или же

android:background="@null"

Ответ 18

Установить фон на ноль

android:background="@null" in your xml 

Ответ 19

если вы используете фон, то вы должны использовать этот тег

android:testCursorDrawable="@null" 

Ответ 20

В моем случае, editText.setBackgroundResource(R.color.transparent); лучше.

Он не удаляет отступы по умолчанию, просто под панелью.

R.color.transparent = #00000000

Ответ 21

В моем случае я использовал пользовательский фон для редактирования текста поэтому установка фона на @null или установка оттенка на прозрачный не было решением для меня так что я сыграл небольшую хитрость, которая очень хорошо сработала для меня, я просто поставил

android:inputType="textVisiblePassword"

и это делает работу довольно хорошо.. это не оптимальное решение, но оно работает