Как скрыть нижнюю панель в EditText



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



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



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



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

789   14  

14 ответов:

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

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

или

android:background="@null"

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

android:background="@null"

пожалуйста, установите фон edittext как

android:background="#00000000"

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

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

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

    Ничего не найдено.