Cómo ocultar underbar en EditText


¿Cómo puedo ocultar el EditText subrayado (la línea de mensaje con pequeños remates en los extremos)?

Podría haber una mejor manera de hacer lo que quiero: tengo un diseño con un EditText. Normalmente, esto se muestra bien donde el usuario puede tocar en él y comenzar a introducir o editar texto.

A veces, sin embargo, me gustaría usar el mismo diseño (simplifica otra lógica) para mostrar los mismos datos de una manera de solo lectura. Quiero que la presentación sea similar-debe tener la misma altura y la misma fuente, pero no tienen la barra inferior.

Como medida provisional, voy a implementar esto eliminando el EditText y sustituyendo un TextView. Creo que eso dará los resultados deseados, pero parece una rotonda una forma costosa de hacer algo que debería ser fácil de hacer cambiando los atributos.

Author: SAurabh, 2012-12-20

14 answers

Puede configurar el EditText para tener un elemento de diseño transparente personalizado o simplemente usar

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

O

android:background="@null"
 724
Author: ha1ogen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-18 12:43:44

Establece background en null.

android:background="@null"
 89
Author: Vinayak V Naik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-09 12:21:37

Por favor, establezca su fondo edittext como

android:background="#00000000"

Funcionará.

 24
Author: kishore kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-13 17:21:10

Puede establecer EditText's backgroundTint valor a un color específico. Si establece el color transparente, underbar debe desaparecer.

android:backgroundTint="@color/Transparent"

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

Pero puedes usar esto en Api v21(Lollipop) o superior

 21
Author: Yasin Kaçmaz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-25 10:24:09

Puedes hacerlo programáticamente usando setBackgroundResource:

editText.setBackgroundResource(android.R.color.transparent);
 14
Author: Roberto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-03 20:44:13

Usando cualquiera de las propiedades:

android:background="@null"

O

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

Funcionó para mí para ocultar el subrayado del EditText.

Sin embargo, tenga en cuenta que luego causa un problema de espaciado con el TextInputLayout que he rodeado el EditText

 12
Author: AjayCodes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-19 10:18:05

Lo que hice fue crear un elemento de diseño de Forma y establecerlo como fondo:

<?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>

Nota: En realidad usé @dimen y @color valores para los firelds, pero he simplificado el archivo de forma aquí para mayor claridad.

 9
Author: Paul LeBeau,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-22 16:03:07

Aquí hay una manera de ocultarlo, sin arruinar el relleno predeterminado:

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)
}

Uso:

editText.setViewBackgroundWithoutResettingPadding(null)
 8
Author: android developer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-02-13 13:57:12

También tiene que establecer un MinWidth, de lo contrario el cursor desaparecerá si el texto está vacío.

        <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"
            />
 5
Author: live-love,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-13 20:18:01

Si su texto de edición ya tiene un fondo, puede usar lo siguiente.

android:textCursorDrawable="@null"
 4
Author: AKASH WANGALWAR,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-27 08:05:16

Descubrí lo más curioso! Si lo establece en null usando enlace de datos: android:background="@{null}"

Entonces no solo se elimina el fondo, sino que la vista todavía tiene el relleno que se calculó a partir del fondo predeterminado. Así que por alguna razón el valor null diferido no borra el relleno del bg anterior..? El relleno en la vista es 4dp izquierda / arriba / derecha, 13dp inferior (desde el nivel 21 del emulador).

Puede que no tenga el mismo resultado final en todos los niveles de API, ¡así que ten cuidado! Que alguien me diga si prueba esto y lo encuentras confiable. (También tenga en cuenta que el relleno inferior sobresale debido a ese subrayado que estaba en el original. Así que probablemente quieras cambiarlo en el XML, o restablecerlo en el código después de cargarlo en la parte superior igual...

 3
Author: androidguy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-04 04:14:55

También puede definir un ESTILO para su EditText para que pueda reagrupar todas las propiedades en común. Es muy potente si tienes que editar texto múltiple que necesita tener el comportamiento

Ponga el código en 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>

Después de eso, solo tiene que llamarlo en su 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" />
 2
Author: Dagnogo Jean-François,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-23 12:15:42

Si desea que esto afecte a todas las instancias de EditText y cualquier clase que herede de ella, entonces debe establecer en su tema el valor para el atributo, editTextBackground.

  <item name="android:editTextBackground">@drawable/bg_no_underline</item>

Un ejemplo del elemento de diseño que uso es:

<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>

Esta es una versión ligeramente modificada de lo que es la implementación predeterminada de material design.

Cuando se aplica, hará que todo tu EditText elimine el subrayado en toda la aplicación, y no tienes que aplicar el estilo a todos y cada uno manualmente.

 2
Author: kingargyle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-31 13:17:47

Tengo algo como esto que es muy muy útil:

generalEditText.getBackground().mutate().setColorFilter(getResources().getColor(R.color.white), PorterDuff.Mode.SRC_ATOP);

Donde Generaleditext es mi EditText y el color blanco es:

<color name="white">#ffffff</color>

Esto no eliminará el relleno y su EditText permanecerá como está. Solo se eliminará la línea en la parte inferior. A veces es más útil hacerlo así.

Si usa android:background="@null" como muchos sugirieron, pierde el relleno y EditText se vuelve más pequeño. Al menos, era mi caso.

Una pequeña nota al margen es si establece background null y pruebe el código java que proporcioné anteriormente, su aplicación se bloqueará justo después de ejecutarlo. (porque obtiene el fondo pero es nulo.) Puede ser obvio, pero creo que señalarlo es importante.

 2
Author: bengongon97,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-28 07:13:53