Пользовательский переключатель - размер дорожки и селектора не работает ниже 21 API
Пользовательский переключатель формы выглядит следующим образом:
Над API 21
![введите описание изображения здесь]()
Ниже API 21
![введите описание изображения здесь]()
Кажется, что блок <size/>
не работает в <shape/>
для pre 21 API.
Любые идеи, как это решить?
CODE
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"/>
вытяжка/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>
вытяжка/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>
Возможно, кто-то столкнулся с подобной проблемой. Пожалуйста, поделитесь своим опытом.
РЕДАКТИРОВАТЬ: добавленные размеры используются
<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>
Ответы
Ответ 1
Все в порядке с тегом <size />
. Drawable
создается и применяется правильно. Ваша проблема полностью лежит на Switch
.
В старых версиях перед Lollipop большой палец использовался с текстом, а drawable был не более чем фоновым изображением, которое масштабировалось до необходимого размера. Вы можете проверить это, добавив текст в атрибуты textOff
и textOn
. Кроме того, существует минимальная ширина.
Итак, просто добавьте switchMinWidth
of 0 и a thumbTextPadding
с половиной диаметра большого пальца
<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" />
и правильное определение его радиуса
<dimen name="switch_track_height">30dp</dimen>
<dimen name="switch_thumb_radius">15dp</dimen>
Ответ 2
Я скопировал ваш код и попытался реализовать его на своей машине, первое, что нужно в свойстве drawable/switch_selector.xml внутри <size>
width должно иметь switch_track_width вместо switch_track_height:
<size
android:width="@dimen/switch_track_width"
android:height="@dimen/switch_track_height" />
Хотя вы решите свою проблему, но я бы предложил еще один файл dimens.xml внутри каталога res/values-v21 и добавить
<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>
Вы также изменяете ширину, высоту и радиус для res/values /dimens.xml.
Надеюсь, это поможет.
Ответ 3
Вы можете использовать этот виджет "android.support.v7.widget.switchcompat". Он поддерживает обратную совместимость поддержки.