Estou usando um controle Switch padrão com o tema holo.light em um aplicativo ICS.
Desejo alterar a cor destacada ou no estado do botão de alternância da luz azul padrão para verde.
Isso deve ser fácil, mas não consigo entender como fazê-lo.
android
togglebutton
JamesSugrue
fonte
fonte
Switch
para esse seletor personalizado posteriormente.Respostas:
A partir de agora, é melhor usar o SwitchCompat da biblioteca AppCompat.v7. Você pode usar um estilo simples para alterar a cor dos seus componentes.
ref: Blog para desenvolvedores do Android
EDIT :
É a maneira pela qual ela deve ser aplicada corretamente
android:theme="@style/Theme.MyTheme"
e isso também pode ser aplicado aos estilos-pai, como EditTexts, RadioButtons, Switches, CheckBoxes e ProgressBars:fonte
colorAccent
, 'off' écolorSwitchThumbNormal
. SeAppCompat
você estiver usando o tema, precisará usar emSwitchCompat
vez deSwitch
. Se você estiver usando o SDK 23+, poderá usarandroid:thumbTint
eandroid:thumbTintMode
com umColorStateList
.Tarde para a festa, mas é assim que eu fiz
Estilo
Cores
Layout
Resultado
Veja a mudança de cores para ativar e desativar a chave
fonte
SwitchCompat
;)Isso está funcionando para mim (requer o Android 4.1):
Observe que o estado "padrão" precisa ser adicionado por último, como mostrado aqui.
O único problema que vejo é que o "polegar" do comutador agora parece maior que o plano de fundo ou a "faixa" do comutador. Acho que é porque ainda estou usando a imagem da faixa padrão, que tem algum espaço vazio ao redor. No entanto, quando tentei personalizar a imagem da faixa usando essa técnica, minha opção parecia ter uma altura de 1 pixel, com apenas uma fatia do texto ativado / desativado. Deve haver uma solução para isso, mas ainda não a encontrei ...
Atualização para Android 5
No Android 5, o código acima faz a troca desaparecer completamente. Deveríamos poder usar o novo método setButtonTintList , mas isso parece ser ignorado para opções. Mas isso funciona:
Atualização para Android 6-7
Como Cheruby afirmou nos comentários, podemos usar o novo
setThumbTintList
e que funcionou como esperado para mim. Também podemos usarsetTrackTintList
, mas isso aplica a cor como uma mistura, com um resultado mais escuro do que o esperado em temas de cores escuras e mais claro que o esperado em temas de cores claras, às vezes a ponto de ficar invisível. No Android 7, consegui minimizar essa alteração substituindo o modo de tonalidade da trilha , mas não consegui resultados decentes no Android 6. Você pode precisar definir cores extras que compensem a mistura. Você já sentiu que o Google não quer que personalizemos a aparência de nossos aplicativos?fonte
switchInput.setThumbTintList(buttonStates);
funciona para o Nougat. API 21-22: use o DrawableCompat conforme sugerido por @Alexey. OswitchInput.setButtonTintList(buttonStates);
não funcionou para mim, não coloriu os estados do meu Switch. API abaixo de 21:switchInput.getThumbDrawable().setColorFilter(someColor, PorterDuff.Mode.SrcIn);
funcionou para mim. Também trabalhei com o Xamarin, então traduza-os para C # nos renderizadores do Android se você usar o Xamarin.Forms.Para alterar o estilo do Switch sem usar o código style.xml ou Java, você pode personalizar o switch no XML do layout:
É atributo android: thumbTint e android: trackTint que permitem personalizar cores
Este é o resultado visual para este XML:
fonte
app:thumbTint
, em vez deandroid:thumbTint
e mudançaswitch
comSwitchCompat
Crie um switch personalizado e substitua setChecked para alterar a cor:
fonte
Embora a resposta do SubChord esteja correta, ela realmente não responde à pergunta de como definir a cor "ativada" sem afetar também outros widgets. Para fazer isso, use a
ThemeOverlay
em styles.xml:E referencie-o no seu switch:
Ao fazê-lo, afetará SOMENTE a cor das visualizações nas quais você deseja aplicá-la.
fonte
E dentro do checker_track.xml:
fonte
thumbTint
aplica-se apenas à API 21 do Android e acima. Como se eu quiser mudar a cor abaixo do Android 21?Eu o resolvi atualizando o Filtro de cores quando o estado do comutador foi alterado ...
fonte
Pode ser um pouco tarde, mas para os botões de opção, o botão toogle não é a resposta, você deve alterar o drawable no parâmetro xml da opção:
fonte
tornar drawable "newthumb.xml"
e crie drawable "newtrack.xml"
e adicione-o no Switch:
fonte
trackTint
outhumbTint
. É preciso escrevê-lo manualmente e ele funciona.No Android Lollipop e superior, defina-o no seu estilo de tema:
fonte
Crie sua própria imagem de 9 patches e defina-a como plano de fundo do botão de alternância.
http://radleymarx.com/2011/simple-guide-to-9-patch/
fonte
A solução sugerida pela arlomedia funcionou para mim. Sobre a questão do espaço extra, resolvi remover todos os revestimentos do interruptor.
EDITAR
Conforme solicitado, aqui está o que eu tenho.
No arquivo de layout, meu switch está dentro de um layout linear e depois de um TextView.
Como estou trabalhando com Xamarin / Monodroid (min. Android 4.1), meu código é:
swtch_EnableEdit é definido anteriormente assim (Xamarin):
Não defino todos os campos e não chamo .setPadding (0, 0, 0, 0).
fonte
você pode criar um estilo personalizado para o widget de alternância que usa o acento de cores como padrão ao criar um estilo personalizado para ele.
fonte
Você pode tentar esta lib, fácil de mudar de cor para o botão de alternar.
https://github.com/kyleduo/SwitchButton
fonte
Tente encontrar a resposta correta aqui: Seletor na cor de plano de fundo do TextView . Em duas palavras, você deve criar Shape em XML com cores e depois atribuí-lo ao estado "marcado" no seu seletor.
fonte
Eu não sei como fazê-lo em java, mas se você tem um estilo definido para o seu aplicativo, você pode adicionar esta linha ao seu estilo e você terá a cor desejada para mim, eu usei # 3F51B5
fonte
A maneira mais fácil é definir o matiz da faixa e definir o modo matiz como src_over para remover 30% de transparência.
toggle_style.xml
fonte
Como complemento às respostas existentes: você pode personalizar o polegar e acompanhar usando seletores na
res/color
pasta, por exemplo:switch_track_selector
switch_thumb_selector
Use estes seletores para personalizar as tonalidades da faixa e do polegar:
Tenha em mente que se você usar Standart
Switch
eandroid
namespace para esses atributos, ele só vai funcionar para API 23 e, mais tarde, por isso usoSwitchCompat
comapp
namespacexmlns:app="http://schemas.android.com/apk/res-auto"
como solução universal.Resultado:
fonte
No xml, você pode alterar a cor como:
Dinamicamente, você pode alterar como:
fonte
Solução para o Android Studio 3.6:
Altera a cor do texto de a no valor definido no arquivo XML de cores (yourColor).
fonte