switch style studio propiedades example ejemplos android xml android-switch

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>