Estoy usando un control Switch estándar con el tema holo.light en una aplicación ICS.
Quiero cambiar el color de estado resaltado o activado del botón de alternar del azul claro estándar al verde.
Esto debería ser fácil, pero parece que no puedo entender cómo hacerlo.
android
togglebutton
JamesSugrue
fuente
fuente
Switch
selector personalizado después.Respuestas:
A partir de ahora, es mejor usar SwitchCompat de la biblioteca AppCompat.v7. Luego puede usar un estilo simple para cambiar el color de sus componentes.
ref: Blog de desarrolladores de Android
EDITAR :
La forma en que se debe aplicar correctamente es a través
android:theme="@style/Theme.MyTheme"
y también se puede aplicar a estilos primarios como EditTexts, RadioButtons, Switches, CheckBoxes y ProgressBars:fuente
colorAccent
, 'off' escolorSwitchThumbNormal
. Si usa elAppCompat
tema, debe usarlo enSwitchCompat
lugar de hacerloSwitch
. Si usa SDK 23+, puede usarandroid:thumbTint
yandroid:thumbTintMode
con aColorStateList
.Tarde para la fiesta, pero así es como lo hice
Estilo
Colores
Diseño
Resultado
Ver cambio de colores para activar y desactivar interruptor
fuente
SwitchCompat
;)Esto funciona para mí (requiere Android 4.1):
Tenga en cuenta que el estado "predeterminado" debe agregarse al final como se muestra aquí.
El único problema que veo es que el "pulgar" del interruptor ahora parece más grande que el fondo o la "pista" del interruptor. Creo que es porque todavía estoy usando la imagen de pista predeterminada, que tiene un espacio vacío a su alrededor. Sin embargo, cuando intenté personalizar la imagen de la pista usando esta técnica, mi interruptor parecía tener una altura de 1 píxel con solo un fragmento del texto de encendido / apagado que aparecía. Debe haber una solución para eso, pero aún no la he encontrado ...
Actualización para Android 5
En Android 5, el código anterior hace que el interruptor desaparezca por completo. Deberíamos poder usar el nuevo setButtonTintList método , pero esto parece ignorarse para los modificadores. Pero esto funciona:
Actualización para Android 6-7
Como Cheruby dijo en los comentarios, podemos usar lo nuevo
setThumbTintList
y funcionó como se esperaba para mí. También podemos usarsetTrackTintList
, pero eso aplica el color como una mezcla, con un resultado que es más oscuro de lo esperado en temas de color oscuro y más claro de lo esperado en temas de color claro, a veces hasta el punto de ser invisible. En Android 7, pude minimizar ese cambio anulando el modo de tinte de pista , pero no pude obtener resultados decentes en Android 6. Es posible que deba definir colores adicionales que compensen la fusión. (¿Alguna vez tiene la sensación de que Google no quiere que personalicemos la apariencia de nuestras aplicaciones?)fuente
switchInput.setThumbTintList(buttonStates);
funciona para Nougat. API 21-22: Use DrawableCompat como lo sugiere @Alexey. ElswitchInput.setButtonTintList(buttonStates);
no funcionó para mí, que no colorear los estados para mi interruptor. API por debajo de 21:switchInput.getThumbDrawable().setColorFilter(someColor, PorterDuff.Mode.SrcIn);
Esto funcionó para mí. También trabajé con Xamarin, así que traduzca esos a C # en los renderizadores de Android si usa Xamarin.Forms.Para cambiar el estilo de Switch sin usar style.xml o código Java, puede personalizar el switch en XML de diseño:
Su atributo android: thumbTint y android: trackTint le permitieron personalizar el color.
Este es el resultado visual para este XML:
fuente
app:thumbTint
lugar deandroid:thumbTint
y cambieswitch
conSwitchCompat
Cree un conmutador personalizado y anule setChecked para cambiar el color:
fuente
Si bien la respuesta de SubChord es correcta, en realidad no responde a la pregunta de cómo configurar el color "activado" sin afectar también a otros widgets. Para hacer esto, use a
ThemeOverlay
en styles.xml:Y consúltalo en tu interruptor:
Al hacerlo, SOLO afectará el color de las vistas a las que desea aplicarlo.
fuente
Y dentro de checker_track.xml:
fuente
thumbTint
solo se aplica en Android API 21 y superior. ¿Cómo si quiero cambiar el color debajo de Android 21?Lo resolví actualizando el filtro de color cuando se cambió el estado del interruptor ...
fuente
Puede ser un poco tarde, pero para los botones de cambio, el botón toogle no es la respuesta, debe cambiar el dibujo en el parámetro xml del cambio:
fuente
hacer dibujable "newthumb.xml"
y hacer dibujable "newtrack.xml"
y agregarlo en Switch:
fuente
trackTint
othumbTint
. Uno necesita escribirlo manualmente y funciona.En Android Lollipop y superior, defínalo en el estilo de tu tema:
fuente
Cree su propia imagen de 9 parches y configúrela como fondo del botón de alternar.
http://radleymarx.com/2011/simple-guide-to-9-patch/
fuente
La solución sugerida de arlomedia funcionó para mí. Sobre su problema de espacio extra resolví quitar todos los rellenos del interruptor.
EDITAR
Según lo solicitado, aquí lo que tengo.
En el archivo de diseño, mi interruptor está dentro de un diseño lineal y después de un TextView.
Como estoy trabajando con Xamarin / Monodroid (min. Android 4.1) mi código es:
swtch_EnableEdit se definió anteriormente de esta manera (Xamarin):
No configuro en todos los rellenos y no llamo .setPadding (0, 0, 0, 0).
fuente
puede hacer un estilo personalizado para el widget de cambio que usa el acento de color como predeterminado cuando lo hace con un estilo personalizado
fuente
Puede probar esta lib, fácil de cambiar de color para el botón de cambio.
https://github.com/kyleduo/SwitchButton
fuente
Intente encontrar la respuesta correcta aquí: Selector en el color de fondo de TextView . En dos palabras, debe crear Shape en XML con color y luego asignarlo al estado "marcado" en su selector.
fuente
No sé cómo hacerlo desde Java, pero si tiene un estilo definido para su aplicación, puede agregar esta línea en su estilo y tendrá el color deseado para mí, he usado # 3F51B5
fuente
La forma más fácil es definir el tinte de la pista y establecer el modo de tinte en src_over para eliminar el 30% de transparencia.
toggle_style.xml
fuente
Como una adición a las respuestas existentes: puede personalizar el pulgar y la pista usando selectores en la
res/color
carpeta, por ejemplo:switch_track_selector
switch_thumb_selector
Use estos selectores para personalizar pistas y tintes de pulgar:
Tenga en cuenta que si usa standart
Switch
yandroid
espacio de nombres para estos atributos, solo funcionará para API 23 y posterior, así que useSwitchCompat
conapp
espacio de nombresxmlns:app="http://schemas.android.com/apk/res-auto"
como solución universal.Resultado:
fuente
En xml, puede cambiar el color como:
Dinámicamente puedes cambiar como:
fuente
Solución para Android Studio 3.6:
Cambia el color del texto de un valor definido en el archivo XML de color (yourColor).
fuente