style - switch case android studio ejemplos
Interruptor personalizado: el tamaño de la pista y el selector no funciona por debajo de 21 API (3)
El interruptor de forma personalizado se ve así:
Por encima de API 21
Debajo de API 21
Parece que el bloque <size/>
no funciona en <shape/>
para las API pre 21.
¿Alguna idea de como resolver esto?
CÓDIGO
container.xml:
<Switch
android:id="@id/switch_follow"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:textOff=""
android:textOn=""
android:thumb="@drawable/switch_selector"
android:track="@drawable/switch_track"/>
drawable / switch_selector.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<layer-list>
<item
android:bottom="@dimen/switch_selector_padding"
android:left="@dimen/switch_selector_padding"
android:right="@dimen/switch_selector_padding"
android:top="@dimen/switch_selector_padding">
<shape
android:dither="true"
android:shape="oval"
android:useLevel="false"
android:visible="true">
<gradient
android:angle="270"
android:endColor="@color/primary_white"
android:startColor="@color/primary_white"/>
<corners
android:radius="@dimen/switch_radius"/>
<size
android:width="@dimen/switch_track_height"
android:height="@dimen/switch_track_height" />
</shape>
</item>
</layer-list>
</item>
</selector>
drawable / switch_track.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:dither="true"
android:shape="rectangle"
android:useLevel="false"
android:visible="true">
<gradient
android:angle="270"
android:endColor="@color/primary_yellow_dark_v2"
android:startColor="@color/primary_yellow_dark_v2"/>
<corners android:radius="@dimen/switch_radius" />
<stroke
android:width="@dimen/switch_stroke_height"
android:color="@android:color/transparent">
</stroke>
<size
android:width="@dimen/switch_track_width"
android:height="@dimen/switch_track_height" />
</shape>
Quizás alguien enfrentó un problema similar. Por favor comparte tu experiencia.
EDITAR : agregado dimensional utilizado
<dimen name="switch_track_width">36dp</dimen>
<dimen name="switch_track_height">30dp</dimen>
<dimen name="switch_radius">50dp</dimen>
<dimen name="switch_selector_padding">2dp</dimen>
<dimen name="switch_stroke_height">0dp</dimen>
He copiado su código y trato de implementarlo en mi máquina, lo primero en su propiedad drawable / switch_selector.xml dentro de <size>
debería tener switch_track_width en lugar de switch_track_height:
<size
android:width="@dimen/switch_track_width"
android:height="@dimen/switch_track_height" />
Aunque resolverá su problema, le sugeriría un archivo más dimens.xml dentro del directorio res / values-v21 y agregaría
<dimen name="switch_track_width">30dp</dimen> //change as per your view appreance
<dimen name="switch_track_height">25dp</dimen> //change as per your view appreance
<dimen name="switch_radius">50dp</dimen> //change as per your view appreance
<dimen name="switch_selector_padding">2dp</dimen>
<dimen name="switch_stroke_height">0dp</dimen>
También puede cambiar el ancho, la altura y el radio para res / values / dimens.xml.
Espero que ayude.
Puede usar este widget "android.support.v7.widget.switchcompat" .Es compatible con la compatibilidad con versiones anteriores.
Todo está bien con la etiqueta <size />
. El Drawable
se crea y se aplica correctamente. Su problema está completamente dentro del Switch
.
En versiones anteriores, antes de Lollipop, el pulgar se usaba con texto y el dibujo no era más que una imagen de fondo que se escalaba al tamaño necesario. Puede verificar esto agregando texto a los atributos textOff
y textOn
. Adicionalmente hay un ancho mínimo definido.
Así que solo agregue un switchMinWidth
de 0 y un thumbTextPadding
de la mitad del diámetro del pulgar
<Switch
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:switchMinWidth="0dp"
android:textOff=""
android:textOn=""
android:thumb="@drawable/switch_selector"
android:thumbTextPadding="@dimen/switch_thumb_radius"
android:track="@drawable/switch_track" />
y una definición de radio correcta para ello
<dimen name="switch_track_height">30dp</dimen>
<dimen name="switch_thumb_radius">15dp</dimen>