Como ocultar barra inferior no EditText

496

Como ocultar a barra inferior do EditText (a linha de prompt com pequenas serifas no final)?

Pode haver uma maneira melhor de fazer o que eu quero: eu tenho um layout com um EditText. Normalmente, isso é exibido bem onde o usuário pode tocar nele e começar a inserir ou editar o texto.

Às vezes, porém, eu gostaria de usar o mesmo layout (simplifica outra lógica) para exibir os mesmos dados de maneira somente leitura. Quero que a apresentação seja semelhante - ela deve ter a mesma altura e a mesma fonte, mas não a barra inferior.

Como uma medida de intervalo, vou implementar isso removendo o EditText e substituindo um TextView. Eu acho que isso dará os resultados desejados, mas parece uma maneira indireta de fazer algo que deve ser fácil, alterando os atributos.

Peri Hartman
fonte
Possível duplicado? stackoverflow.com/questions/5478109/…
Mohamed Taher Alrefaie

Respostas:

1052

Você pode definir EditTextum drawable transparente personalizado ou apenas usar

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

ou

android:background="@null"

ou programaticamente

editText.setBackgroundResource(android.R.color.transparent);
ha1ogen
fonte
7
A melhor resposta, como diz ha1ogen, é criar um desenho personalizado. Comece com o patch 9 que é usado para os campos normais EditText. Modifique-o para remover a barra inferior e outros gráficos que você não deseja. Com isso, o EditText modificado terá as mesmas margens e aparência geral dos campos normais do EditText. Se você simplesmente definir o plano de fundo como nulo, ele perderá as margens.
Peri Hartman #
124
use isto:android:background="@android:color/transparent"
dd619 02/07/2015
3
e se eu já tiver um fundo de outra cor, digamos cinza, como remover underbar / underline nesse caso?
Narendra Singh
6
No Android 19, o uso android:background="@android:color/transparent"causa o mesmo problema de perda de margens ... Existe algum exemplo de alguém criando um drawable personalizado?
Anti Earth
2
Como podemos fazer programaticamente em java?
Jagdish #
100

Defina o plano de fundo como nulo.

android:background="@null"
Vinayak V Naik
fonte
2
É o mesmo que background = "# 00000000". Realmente não funciona.
Peri Hartman às
14
Isso funcionou para mim, mas acabei fazendo android:background="@android:color/transparentporque @nullé assustador.
Dick Lucas
3
@ Richard Por que é @nullassustador?
Michael
@ null indicará que não existe plano de fundo. Se especificarmos background = "# 00000000", ele desenhará um fundo branco com o valor alfa "0".
Vinayak V Naik
2
"@null" também oculta o cursor piscante, "@android: color / transparent" não.
Lukas Novak
37

Você pode definir EditTexto backgroundTintvalor de uma cor específica. Se você definir cores transparentes, a barra inferior deverá desaparecer.

android:backgroundTint="@color/Transparent"

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

Mas você pode usar isso em Api v21(Lollipop)ou superior

Yasin Kaçmaz
fonte
Isto é muito melhor do que mudar de fundo de toda a vista (como outras respostas sugerem)
Alex Semeniuk
26

Defina seu plano de fundo do edittext como

android:background="#00000000"

Vai funcionar.

kishore kumar
fonte
3
Vai funcionar meio que, mas não corretamente. Se você simplesmente remover o plano de fundo, também perderá as margens ao redor do campo - elas fazem parte do plano de fundo padrão. A solução certa é substituir um fundo diferente que simplesmente não têm o underbar nele, como @ ha1ogen sugere
Peri Hartman
1
Como desfazer isso programaticamente
Tushar Narang
23

Você pode fazer isso programaticamente usando setBackgroundResource:

editText.setBackgroundResource(android.R.color.transparent);
Roberto
fonte
não sei por que, mas não funciona. a linha ainda está lá
Syed Hissaan
15

O que fiz foi criar um drawable Shape e defini-lo como plano de fundo:

<?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: Eu realmente utilizados @dimene @coloros valores para os firelds, mas eu simplificou o arquivo de forma aqui para maior clareza.

Paul LeBeau
fonte
1
Esta é uma opção perfeitamente boa também. É uma variação na configuração de um drawable personalizado.
Peri Hartman
15

Usando qualquer propriedade:

android:background="@null"

OU

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

trabalhou para eu esconder o sublinhado do EditText.

No entanto, observe que isso causa um problema de espaçamento com o TextInputLayout que envolvi o EditText

AjayCodes
fonte
1
O problema de espaçamento vem do layout do erro. Para corrigir isso, defina a propriedade errorEnabled do TextInputLayout como false app: errorEnabled = "false"
#
12

Aqui está uma maneira de escondê-lo, sem arruinar o preenchimento padrão:

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)

Atualizar:

Se você estiver sempre passando nulo, poderá codificá-lo no método (e poderá sobrecarregar o próprio EditText)

fun EditText.removeUnderline() {
    val paddingBottom = this.paddingBottom
    val paddingStart = ViewCompat.getPaddingStart(this)
    val paddingEnd = ViewCompat.getPaddingEnd(this)
    val paddingTop = this.paddingTop
    ViewCompat.setBackground(this, null)
    ViewCompat.setPaddingRelative(this, paddingStart, paddingTop, paddingEnd, paddingBottom)
}

// usage:
editText.removeUnderline()
desenvolvedor android
fonte
Essa resposta é perfeita e deve ser aceita. Ele pode remover o plano de fundo sem remover o preenchimento padrão.
Pankaj Kumar
6

Você também deve definir uma minWidth, caso contrário, o cursor desaparecerá se o texto estiver vazio.

        <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"
            />
amor ao vivo
fonte
6

No meu caso, eu estava usando o plano de fundo personalizado para editar o texto, portanto, definir o plano de fundo como @ nulo ou definir o tom como transparente não era a solução para mim, então joguei um pequeno truque que funcionou muito bem para mim.

android:inputType="textVisiblePassword"

e faz o trabalho muito bem .. não é a solução ideal, mas funciona

Harvinder Singh
fonte
1
Gosto disso em conjunto com o plano de fundo transparente, porque oculta a barra que aparece abaixo do texto durante a digitação - tudo o que quero é o texto, sem adornos.
19Craig
1
Esta resposta é o único que trabalhou para mim desde os meus caixas EditText são criados através de programação e cada um tem diferentes cores de fundo para que o fundo não pode ser nulo e contam com a cor pais fundo
Sharone Lev
5

Eu tenho algo parecido com isto que é muito, muito útil:

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

onde generalEditText é meu EditText e a cor branca é:

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

Isso não removerá o preenchimento e o EditText permanecerá como está. Somente a linha na parte inferior será removida. Às vezes é mais útil fazer assim.

Se você usar android:background="@null" o máximo de sugestões, você perde o preenchimento e o EditText fica menor. Pelo menos, foi o meu caso.

Uma pequena observação: se você definir o fundo como nulo e tentar o código java que forneci acima, seu aplicativo falhará imediatamente após executá-lo. (porque obtém o plano de fundo, mas é nulo.) Pode ser óbvio, mas acho importante salientar.

bengongon97
fonte
4

Eu descobri a coisa mais curiosa! Se você configurá-lo paranull usar Ligação de Dados: android:background="@{null}"

Além disso, o fundo não é removido, mas a exibição ainda possui o preenchimento calculado a partir do fundo padrão. Portanto, por algum motivo, a configuração nula adiada não limpa o preenchimento da página anterior ..? O preenchimento na exibição é esquerdo / superior / direito 4dp, 13dp inferior (do nível 21 do emulador).

Pode não ter o mesmo resultado final em todos os níveis da API, então cuidado! Alguém me diga se você testar isso e achar confiável. (Observe também que esse preenchimento inferior se destaca por causa do sublinhado que estava no original. Portanto, você provavelmente desejará alterá-lo no XML ou redefini-lo no código depois de carregado para igual ao topo ...

androidguy
fonte
4

se o seu texto de edição já tiver um plano de fundo, você poderá usar os seguintes.

android:textCursorDrawable="@null"
AKASH WANGALWAR
fonte
Embora isso não resolva a questão, foi de grande ajuda para mim.
Rubén Viguera
4

Se você deseja que isso afete todas as instâncias do EditText e qualquer classe que herda dele, defina em seu tema o valor do atributo, editTextBackground.

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

Um exemplo do drawable que eu uso é:

<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 é uma versão ligeiramente modificada da implementação padrão do design do material.

Quando aplicado, todo o EditText remove o sublinhado do aplicativo, e você não precisa aplicar o estilo manualmente a todos.

kingargyle
fonte
4

Simplesmente use isto

 editText.setBackgroundColor(Color.TRANSPARENT);
prashant kute
fonte
2

Você também pode definir um ESTILO para o seu editText para poder reagrupar todas as propriedades em comum. É muito poderoso se você precisar editar vários textos que precisam ter o comportamento

Coloque o código em 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>

Depois disso, você só precisa chamá-lo em seu 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" />
Dagnogo Jean-François
fonte
1

Programaticamente usar: editText.setBackground(null)

De xmluso:android:background="@null"

Shubham Kaushik
fonte
1
android:background="@android:color/transparent"

Ou

android:background="@null"
Null Pointer Exception
fonte
1

android: inputType = "textVisiblePassword | textMultiLine" android: background = "@ android: color / transparent"

... não é a solução ideal, mas funciona.

Carles Garrigues
fonte
0

Definir plano de fundo como nulo

android:background="@null" in your xml 
Jocelin
fonte
0

No meu caso, editText.setBackgroundResource(R.color.transparent);é melhor.

Não remove o preenchimento padrão, logo abaixo da barra.

R.color.transparent = #00000000

HJ Song
fonte
0

se você estiver usando plano de fundo, deverá usar esta tag

android:testCursorDrawable="@null" 
ATIQ UR REHMAN
fonte
0

Para manter as margens e a cor do plano de fundo, use:

background.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <padding
        android:bottom="10dp"
        android:left="4dp"
        android:right="8dp"
        android:top="10dp" />

    <solid android:color="@android:color/transparent" />

</shape>

Editar texto:

<androidx.appcompat.widget.AppCompatEditText
    android:id="@+id/none_content"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/background"
    android:inputType="text"
    android:text="First Name And Last Name"
    android:textSize="18sp" />
itabdullah
fonte