android - sirven - que es un tema en word
Cómo aplicar un estilo personalizado a SwitchCompat (2)
El estilo debe incluir el padre
<item name="switchStyle">@style/MySwitchCompat</item>
<style name="MySwitchCompat" parent="Widget.AppCompat.CompoundButton.Switch">
<item name="android:textColor">@color/accent</item>
<item name="android:fontFamily">sans-serif-light</item>
</style>
Me gustaría aplicar un estilo personalizado a SwitchCompat. Cambiar dibujables y texto para el estado de encendido y apagado. ¿Cómo puedo conseguir esto? No puedo encontrar ningún ejemplo sobre cómo se hace esto. Intenté lo siguiente en mi styles.xml pero aparentemente no estoy usando el padre correcto:
<style name="Switch" parent="android:Widget.AppCompat.Widget.CompoundButton.SwitchCompat">
<item name="android:textOn">@string/common_yes</item>
<item name="android:textOff">@string/common_no</item>
<item name="android:thumb">@drawable/btn_switch_selector</item>
<item name="android:track">@drawable/btn_switch_bg_selector</item>
</style>
Editar
Me las arreglé para cambiar los elementos dibujables en el código.
switchView.setThumbResource(R.drawable.btn_switch_selector);
switchView.setTrackResource(R.drawable.btn_switch_bg_selector);
pero todavía no he encontrado una manera de cambiar el texto del interruptor. El siguiente fragmento de código no parece funcionar. Tal vez necesito establecer algunas propiedades de texto más?
switchView.setTextOn(context.getString(R.string.common_yes));
switchView.setTextOff(context.getString(R.string.common_no));
De acuerdo con el código fuente de SwitchCompat, debería haber soporte para el texto de activación / desactivación: https://android.googlesource.com/platform/frameworks/support/+/421d8baa4a524e1384bcf033360bccaf8d55081d/v7/appcompat/src/android/support/v7/widget/SwitchCompat.java
La propiedad {@link #setText (CharSequence)} controla el texto que se muestra en la etiqueta del conmutador, mientras que {@link #setTextOff (CharSequence) off} y {@link #setTextOn (CharSequence) on} text controla el texto en el pulgar
Editar 2
Finalmente encontré una solución de código. Al parecer, setShowText()
debe establecer en true
para que el texto aparezca en el conmutador.
switchView.setTextOn(context.getString(R.string.common_yes));
switchView.setTextOff(context.getString(R.string.common_no));
switchView.setShowText(true);
switchView.setThumbResource(R.drawable.btn_switch_selector);
switchView.setTrackResource(R.drawable.btn_switch_bg_selector);
y solución xml
<android.support.v7.widget.SwitchCompat
android:id="@+id/view_switch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:thumb="@drawable/btn_switch_selector"
app:track="@drawable/btn_switch_bg_selector"
android:textOn="@string/common_yes"
android:textOff="@string/common_no"
app:showText="true" />
Todavía me gustaría saber si hay una manera de poner esto en styles.xml
.
Finalmente, encontré una forma de aplicar el mismo estilo en toda la aplicación. themes.xml
la siguiente línea en mi themes.xml
<item name="switchStyle">@style/Custom.Widget.SwitchCompat</item>
Y lo siguiente en mi styles.xml
<style name="Custom.Widget.SwitchCompat" >
<item name="android:thumb">@drawable/btn_switch_selector</item>
<item name="track">@drawable/btn_switch_bg_selector</item>
<item name="showText">true</item>
<item name="android:textOn">@string/common_yes</item>
<item name="android:textOff">@string/common_no</item>
</style>