EditText sublinhado abaixo da propriedade de texto

108

Gostaria de alterar a cor azul abaixo do texto de edição, não sei que propriedade é.

Tentei usar uma cor de fundo diferente para ele, mas não funcionou.

Anexei uma imagem abaixo:

insira a descrição da imagem aqui

Entusiasta do Android
fonte
Este é um plano de fundo para o EditText que está disponível em determinado nível de API / telefone. Em outras palavras, se seu aplicativo for executado em um telefone diferente, você poderá ver um plano de fundo diferente.
Sherif elKhatib
crie seu fundo de texto de edição personalizado
Vijju
1
Possível duplicação do tópico anterior. Verifique stackoverflow.com/a/4585750/1129468
gokhanakkurt
Use o código abaixo e me diga se está funcionando ou não.
InnocentKiller
android-holo-colors.com
Pratik Butani

Respostas:

90

Na verdade, é bastante fácil definir a cor de sublinhado de um EditText programaticamente (apenas uma linha de código).

Para definir a cor:

editText.getBackground().setColorFilter(color, PorterDuff.Mode.SRC_IN);

Para remover a cor:

editText.getBackground().clearColorFilter();

Nota: quando o EditText tem foco , a cor que você definir não terá efeito, em vez disso, ela tem uma cor de foco.

Referência API:

Drawable # setColorFilter

Drawable # clearColorFilter

Jing Li
fonte
4
Também funciona no Xamarin para Android, em seu renderizador personalizado OnElementChanged você pode fazerControl.Background.SetColorFilter(Android.Graphics.Color.White, PorterDuff.Mode.SrcIn);
David Conlisk
@DavidConlisk qual Renderervocê substitui? Estou tentando descobrir como fazer isso funcionar para uma barra de pesquisa.
Nick N.
@NickN. Eu estava usando isso como seletor, então cancelei o PickerRenderer. Deve funcionar com qualquer renderizador que melhor se adapte a você (em teoria!)
David Conlisk
1
Acho que deveria, mas o problema pode ser que SearchBarRenderernão seja do tipo EditText. Não consigo fazer funcionar.
Nick N.
85

Use android:backgroundTint=""em seu EditTextlayout xml.

Para api <21, você pode usar AppCompatEditTextda biblioteca de suporte, entãoapp:backgroundTint=""

Soheil Setayeshi
fonte
14
Isso só funciona atualmente na API 21 e superior. sem suporte para trás.
John Shelley
2
Esta é de longe a solução mais simples e concisa.
IgorGanapolsky
@JohnShelley veja minha resposta abaixo , funciona para pré-Lollipop e superior.
Sufian
3
android:background="@null"para dispositivos com api <21.
Hammad Nasir
4
Para fazer esse atributo funcionar nas APIs abaixo de 21, você deve usar o namespace app (xmlns: app = " schemas.android.com/apk/res-auto" ) em vez de android.
Andrei K.
38

Você deve usar uma imagem de fundo diferente, não uma cor, para cada estado do EditText(foco, habilitado, ativado).

http://android-holo-colors.com/

No site acima, você pode obter imagens de vários componentes do tema Holo. Basta selecionar "EditText" e a cor desejada. Você pode ver uma prévia na parte inferior da página.

Baixe o arquivo .zip e copie e cole os recursos do seu projeto (imagens e XML).

se o seu XML for denominado: apptheme_edit_text_holo_light.xml (ou algo semelhante):

  1. Vá para seu XML "styles.xml" e adicione o EditTextestilo personalizado :

    <style name="EditTextCustomHolo" parent="android:Widget.EditText">
       <item name="android:background">@drawable/apptheme_edit_text_holo_light</item>
       <item name="android:textColor">#ffffff</item>
    </style>
  2. Basta fazer isso em seu EditText:

    <EditText
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       style="@style/EditTextCustomHolo"/>

E é isso, espero que te ajude.

Akariuz
fonte
24

Isso funciona bem para versões antigas e novas do Android (funciona bem até mesmo na API 10!).

Defina este estilo em styles.xml:

<style name="EditText.Login" parent="Widget.AppCompat.EditText">
    <item name="android:textColor">@android:color/white</item>
    <item name="android:textColorHint">@android:color/darker_gray</item>
    <item name="colorAccent">@color/blue</item>
    <item name="colorControlNormal">@color/blue</item>
    <item name="colorControlActivated">@color/blue</item>
</style>

E agora em seu XML, defina isso como tema e estilo ( estilo para definir textColore tema para definir todas as outras coisas):

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="text"
    style="@style/EditText.Login"
    android:theme="@style/EditText.Login"/>

Editar

Esta solução causa uma pequena falha na IU em versões mais recentes do Android (Lollipop ou Marshmallow em diante) que as alças de seleção são sublinhadas.

Este assunto é discutido neste tópico . (Eu não tentei essa solução pessoalmente)

Sufian
fonte
Ótima resposta, obrigado. Usar parent = "Widget.AppCompat.EditText", em vez de parent = "android: Widget.EditText" resolveu meu problema principal.
cfl
1
Acho que você quer dizer que funciona Lollipop (21) e para cima porque estou recebendo avisos de que não é inferior a 21
Mark O'Sullivan
@ MarkO'Sullivan não, isso funciona para o pré-Lollipop e todo o caminho para cima. Eu testei na API 10 e funciona bem. Cole o erro completo e o local onde ele aparece.
Sufian,
O texto de edição focado ainda tinha cores primárias para mim, então tive que usar esta abordagem: stackoverflow.com/a/36543554/2413303
EpicPandaForce
18

você pode alterar a cor de Sublinhado de EditText especificando-a em styles.xml . No seu app theme.xml, adicione o seguinte.

<item name="android:textColorSecondary">@color/primary_text_color</item> 

Conforme apontado por ana na seção de comentários

  <item name="android:colorControlActivated">@color/black</item>

definir isso no estilo do tema funciona bem para alterar a cor de um sublinhado de texto de edição.

Dharani Kumar
fonte
3
Observe que também android:textColorSecondaryé usado para determinar a cor da seta para trás e do DrawerLayoutícone de hambúrguer na ActionBar.
Bianca Daniciuc
7
Acabei usando em <item name="colorControlNormal">@color/edittext_underline_color</item>vez de textColorSecondary por causa do problema de coloração da barra de navegação.
Bianca Daniciuc
14

Portanto, você precisa criar um novo arquivo .xml em sua pasta drawable.

Nesse arquivo, cole este código:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
   <item
    android:bottom="8dp"
    android:left="-3dp"
    android:right="-3dp"
    android:top="-3dp">
    <shape android:shape="rectangle">
     <stroke
       android:width="1dp"
       android:color="@color/white"/>
     </shape>
   </item>
</layer-list>

E em seu EditText, defina

android:background="@drawable/your_drawable"

Você pode brincar com seu xml drawable, definir cantos, preenchimentos, etc.

Vulovic Vukasin
fonte
1
esta é provavelmente a melhor solução, já que permite a personalização completa do EditText, sem afetar outros componentes em um estilo ou layout
mutável2112
pelo que eu entendi, você pode apenas definir o fundo do texto de edição para branco
rmanalo
Passei por todas as soluções que pude encontrar, esta foi a única que funcionou para mim usando componentes Android Material.
barney.balazs
9

No estilo do seu aplicativo, defina a propriedade colorAccent . Aqui você encontra um exemplo

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/action_bar</item>
    <item name="colorPrimaryDark">@color/primary_dark</item>
    <item name="colorAccent">@color/action_bar</item>
</style>
Roberto
fonte
5

Você pode alterar a cor de EditText programaticamente apenas usando esta linha de código facilmente:

edittext.setBackgroundTintList(ColorStateList.valueOf(yourcolor));

Matin Ashtiani
fonte
1
Funciona como um encanto: D
Taslim Oseni
1

Use o código abaixo para alterar a cor de fundo da borda do texto de edição.

Crie um novo arquivo XML em drawable.

abc.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#00000000" />
    <stroke android:width="1dip" android:color="#ffffff" />
</shape>

e adicione-o como fundo de seu texto de edição

android:background="@drawable/abc"
InnocentKiller
fonte
mencionei que havia tentado definir uma cor de fundo acima. não funcionou.
Android Enthusiast
1

Para alterar a cor da linha de fundo, você pode usar isso no tema do seu aplicativo:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>

    <item name="colorControlNormal">#c5c5c5</item>
    <item name="colorControlActivated">#ffe100</item>
    <item name="colorControlHighlight">#ffe100</item>
</style>

Para alterar a cor do rótulo flutuante, escreva o seguinte tema:

<style name="TextAppearence.App.TextInputLayout" parent="@android:style/TextAppearance">
<item name="android:textColor">#4ffd04[![enter image description here][1]][1]</item>
</style>

e use este tema em seu layout:

 <android.support.design.widget.TextInputLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="20dp"
    app:hintTextAppearance="@style/TextAppearence.App.TextInputLayout">

    <EditText
        android:id="@+id/edtTxtFirstName_CompleteProfileOneActivity"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:capitalize="characters"
        android:hint="User Name"
        android:imeOptions="actionNext"
        android:inputType="text"
        android:singleLine="true"
        android:textColor="@android:color/white" />

</android.support.design.widget.TextInputLayout>

insira a descrição da imagem aqui

SAndroidD
fonte
O texto de edição focado ainda tinha cores primárias para mim, então tive que usar esta abordagem: stackoverflow.com/a/36543554/2413303
EpicPandaForce
1

Você pode fazer isso com AppCompatEditText e seletor de cores:

            <androidx.appcompat.widget.AppCompatEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:backgroundTint="@color/selector_edittext_underline" />

selector_edittext_underline.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/focused_color" 
          android:state_focused="true" />
    <item android:color="@color/hint_color" />
</selector>
Gogi Bobina
fonte
0

Se você não precisa oferecer suporte a dispositivos com API <21, use backgroundHint em xml, por exemplo:

 <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="textPersonName"
            android:hint="Task Name"
            android:ems="10"
            android:id="@+id/task_name"
            android:layout_marginBottom="15dp"
            android:textAlignment="center"
            android:textColor="@android:color/white"

            android:textColorLink="@color/blue"
            android:textColorHint="@color/blue"
            android:backgroundTint="@color/lighter_blue" />

Para melhor suporte e fallbacks, use a solução @Akariuz. backgroundHint é a solução mais indolor, mas não compatível com versões anteriores, com base em seus requisitos, faça uma chamada.

MoMo
fonte
0

mude a colorAccentcor que você precisa para definir a cor colorAccente execute para obter o resultado

MD Khali
fonte
0

Basta alterar android: backgroundTint no código xml para a sua cor

Marcus Runge
fonte