Estou usando o appcompat v7 para obter uma aparência consistente no Android 5 e menos. Funciona bastante bem. No entanto, não consigo descobrir como alterar a cor da linha de fundo e a cor de destaque dos EditTexts. É possível?
Tentei definir um personalizado android:editTextStyle
(cf. abaixo), mas só consegui alterar a cor completa do plano de fundo ou a cor do texto, mas não a linha inferior nem a cor de destaque. Existe um valor de propriedade específico para usar? eu tenho que usar uma imagem drawable personalizada através da android:background
propriedade? não é possível especificar uma cor em hexa?
<style name="Theme.App.Base" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:editTextStyle">@style/Widget.App.EditText</item>
</style>
<style name="Widget.App.EditText" parent="Widget.AppCompat.EditText">
???
</style>
De acordo com as fontes da API 21 do Android, os EditTexts com design de material parecem usar colorControlActivated
e colorControlNormal
. Portanto, tentei substituir essas propriedades na definição de estilo anterior, mas ela não tem efeito. Provavelmente appcompat não o usa. Infelizmente, não consigo encontrar as fontes para a última versão do appcompat com design de material.
AppCompatEditText
, aparentemente.Respostas:
Finalmente, encontrei uma solução. Ela simplesmente consiste em substituir o valor para
colorControlActivated
,colorControlHighlight
ecolorControlNormal
em sua definição de tema aplicativo e não o seu estilo EditText. Em seguida, pense em usar esse tema para qualquer atividade que desejar. Abaixo está um exemplo:fonte
android:theme="@style/Theme.App.Base
. Isso garantirá que o estilo também não afete outras visualizações em seus layouts que você não deseja alterar.AppCompatActivity
. Não funcionará se herdar deActivity
.Eu senti que isso precisava de uma resposta, caso alguém quisesse mudar apenas um único texto. Eu faço assim:
fonte
Embora a solução Laurents esteja correta, ela vem com algumas desvantagens, conforme descrito nos comentários, pois não apenas a linha inferior da
EditText
tonalidade é tingida, mas também o botão Voltar daToolbar
,CheckBoxes
etc.Felizmente
v22.1
dasappcompat-v7
introduziu algumas novas possibilidades. Agora é possível atribuir um tema específico apenas a uma visualização. Diretamente do Changelog :Portanto, em vez de definir a cor desejada em um tema global, criamos um novo e o atribuímos apenas ao
EditText
.Exemplo:
fonte
colorControlNormal
sem o prefixo do Android, o método appcompat é usado para colorir os widgets, enquanto o prefixo recai no método do sistema e isso só está disponível nos dispositivos API 21+.22.2.0
a versão de AppCompat mas este truque não está funcionando :(Isso pode ser alterado em XML usando:
Para a API de referência> = 21, use:
Para compatibilidade com API anterior <21, use:
fonte
backgroundTint="@color/blue"
em vez deandroid:backgroundTint="@color/blue"
para o suporte compatível para trásandroid:backgroundTint="@color/blue"
, useapp:backgroundTint="@color/blue"
para suportar dispositivos pré-pirulito, obrigado pelo seu comentário!tools:ignore="MissingPrefix"
se um sublinhado vermelho aparecer em #app:backgroundTint="<your color>"
Aqui está a solução para API <21 e acima
Espero que ajude
fonte
24.2.1
,25.1.1
,25.2.0
para o dispositivo <21 e> 21 e ainda trabalhando. Verifique esta unidade de demonstração simples.google.com/file/d/0B_poNaia6t8kSzU3bDFVazRSSDA/… . Não sei por que esse código não funciona para você, por favor me avise. obrigadoA resposta aceita é um pouco mais por estilo, mas o mais eficiente é adicionar o atributo colorAccent ao seu estilo AppTheme da seguinte maneira:
O atributo colorAccent é usado para colorir o widget em todo o aplicativo e, portanto, deve ser usado para garantir a consistência
fonte
name="android:colorAccent"
erroneamenteSe você estiver usando,
appcompat-v7:22.1.0+
poderá usar o DrawableCompat para colorir seus widgetsfonte
Usar:
Isso suportará dispositivos pré-pirulito não apenas +21
fonte
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
e ele deve funcionarfonte
Uma solução rápida para o seu problema é procurar em yourappspackage / build / intermediates / exploded-aar / com.android.support / appcompat-v7 / res / drawable / abc_edit_text_material.xml e copiar esse arquivo xml na sua pasta de desenho. Em seguida, você pode alterar a cor dos 9 arquivos de patch dentro deste seletor, para corresponder às suas preferências.
fonte
É muito fácil, basta adicionar
android:backgroundTint
atributo no seuEditText
.fonte
app:backgroundTint="@color/blue"
funciona em todos os níveis da API .. embora por qualquer motivo ele ainda está se voltando para uma cor diferente quando selecionado XDAqui está uma parte do código-fonte da
TextInputLayout
biblioteca de design de suporte ( ATUALIZADO para a versão 23.2.0 ), que alteraEditText
a cor da linha inferior de uma maneira mais simples:Parece que todo o código acima se torna inútil no momento na 23.2.0, se você deseja alterar a cor programaticamente.
E se você deseja suportar todas as plataformas, aqui está o meu método:
fonte
Eu também fiquei preso nesse problema por muito tempo.
Eu exigia uma solução que funcionasse para versões acima e abaixo da v21.
Finalmente descobri uma solução muito simples, talvez não ideal, mas eficaz: basta definir a cor do plano de fundo
transparent
nas propriedades EditText.Espero que isso poupe alguém a algum tempo.
fonte
Para mim, modifiquei o AppTheme e um valor colors.xml Tanto o colorControlNormal quanto o colorAccent me ajudaram a alterar a cor da borda EditText. Assim como o cursor e o "|" quando dentro de um EditText.
Aqui está o colors.xml
Tirei o atributo android: textCursorDrawable para @ null que coloquei dentro do estilo editText. Quando tentei usar isso, as cores não mudaram.
fonte
Você pode definir o segundo plano do edittext como um retângulo com menos preenchimento à esquerda, direita e superior para conseguir isso. Aqui está o exemplo xml:
Substitua a forma por um seletor se desejar fornecer largura e cor diferentes para o edittext focado.
fonte
No Activit.XML, adicione o código
Onde
BackgroundTint=color
a cor desejadafonte
Eu uso esse método para alterar a cor da linha com PorterDuff, sem nenhum outro drawable.
fonte
Se você deseja alterar os resultados sem usar as cores do aplicativo, use estas linhas no seu tema:
Não conheço outra solução.
fonte
Eu elaborei uma solução funcional para esse problema após 2 dias de luta, a solução abaixo é perfeita para aqueles que desejam alterar apenas alguns textos de edição, alterar / alternar cores através do código java e querem superar os problemas de comportamento diferente nas versões do sistema operacional devido ao uso do método setColorFilter ().
Usa em xml
Adicionar linhas com estilo
código java para alternar cor
fonte
Fiquei absolutamente perplexo com esse problema. Eu havia tentado de tudo nesse segmento e em outros, mas não importa o que fiz, não consegui mudar a cor do sublinhado para nada além do azul padrão.
Eu finalmente descobri o que estava acontecendo. Eu estava (incorretamente) usando
android.widget.EditText
ao criar uma nova instância (mas o restante dos meus componentes era da biblioteca appcompat). Eu deveria ter usadoandroid.support.v7.widget.AppCompatEditText
. Troqueinew EditText(this)
comnew AppCompatEditText(this)
e o problema foi imediatamente resolvido. Acontece que, se você estiver realmente usandoAppCompatEditText
, ele respeitará apenas oaccentColor
tema (como mencionado em vários comentários acima) e nenhuma configuração adicional será necessária.fonte
Este é o mais fácil e mais eficiente / reutilizável / funciona em todas as APIs.
Crie uma classe EditText personalizada da seguinte forma:
Em seguida, use-o assim:
fonte
Para alterar o plano de fundo EditText dinamicamente, você pode usar ColorStateList .
Créditos: Esta resposta do SO sobre o ColorStateList é incrível .
fonte
Adicione
app:backgroundTint
abaixo do nível 21. da API, caso contrário, useandroid:backgroundTint
.Para abaixo do nível 21 da API.
Para um nível superior à API 21.
fonte
Modifique este método de acordo com sua necessidade. Isso funcionou para mim!
fonte