Le bouton de forme personnalisée ressemble à ça:
Ci-dessus API 21
Ci-dessous API 21
On dirait que le bloc <size/>
ne fonctionne pas dans <shape/>
pour les 21 API antérieures.
Des idées comment résoudre ce problème?
CODE
conteneur.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>
Peut-être que quelqu'un a été confronté à un problème similaire. S'il vous plaît partager votre expérience.
EDIT: ajout des dimensions utilisées
<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>
Tout va bien avec la balise <size />
. La Drawable
est créée et appliquée correctement. Votre problème se situe complètement dans la Switch
.
Dans les versions antérieures, le pouce avant Lollipop était utilisé avec du texte et le dessin était simplement une image d’arrière-plan qui était redimensionnée à la taille requise. Vous pouvez le vérifier en ajoutant du texte aux attributs textOff
et textOn
. De plus, une largeur minimale est définie.
Il suffit donc d’ajouter une switchMinWidth
de 0 et une thumbTextPadding
de la moitié du diamètre du pouce
<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" />
et une définition correcte du rayon pour cela
<dimen name="switch_track_height">30dp</dimen>
<dimen name="switch_thumb_radius">15dp</dimen>
J'ai copié votre code et essayé d'implémenter dans ma machine, la première chose dans votre propriété drawable/switch_selector.xml à l'intérieur de <size>
width devrait avoir switch_track_width au lieu de switch_track_height:
<size
Android:width="@dimen/switch_track_width"
Android:height="@dimen/switch_track_height" />
Cela résoudra votre problème, mais je suggèrerais un fichier dimens.xml supplémentaire dans le répertoire res/values-v21 et ajouter
<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>
Vous pouvez également modifier la largeur, la hauteur et le rayon de res/values / dimens.xml.
J'espère que ça va aider.
Vous pouvez utiliser ce widget "Android.support.v7.widget.switchcompat" .Il prend en charge la compatibilité descendante.