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


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

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


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


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.


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)


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


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.


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>

5

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

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


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"

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


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>

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.


0

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


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.