自定义开关 - 轨道和选择器大小在 21 以下时不工作 API
Custom Switch - track and selector size not working below 21 API
自定义形状开关如下所示:
以上 API 21
低于API21
似乎 <size/>
块在 <shape/>
中对于 pre 21 API 不起作用。
有什么解决办法吗?
代码
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>
也许有人遇到过类似的问题。请分享您的经验。
编辑:添加使用的尺寸
<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>
我已经复制了你的代码并尝试在我的机器上实现,首先在你的 drawable/switch_selector.xml 里面 <size>
宽度 属性 应该有 switch_track_width 而不是 switch_track_height:
<size
android:width="@dimen/switch_track_width"
android:height="@dimen/switch_track_height" />
虽然可以解决您的问题,但我建议在 res/values-v21 目录中再添加一个 dimens.xml 文件并添加
<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.
的宽度、高度和半径
希望对您有所帮助。
您可以使用此小部件"android.support.v7.widget.switchcompat"。它支持向后兼容。
<size />
标签一切正常。 Drawable
已正确创建和应用。您的问题完全在 Switch
.
范围内
在 Lollipop 之前的旧版本中,拇指与文本一起使用,而可绘制对象只不过是缩放到所需大小的背景图像。您可以通过向 textOff
和 textOn
属性添加文本来验证这一点。此外,还定义了最小宽度。
所以只要加上一个0的switchMinWidth
和一个拇指一半直径的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>
自定义形状开关如下所示:
以上 API 21
低于API21
似乎 <size/>
块在 <shape/>
中对于 pre 21 API 不起作用。
有什么解决办法吗?
代码
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>
也许有人遇到过类似的问题。请分享您的经验。
编辑:添加使用的尺寸
<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>
我已经复制了你的代码并尝试在我的机器上实现,首先在你的 drawable/switch_selector.xml 里面 <size>
宽度 属性 应该有 switch_track_width 而不是 switch_track_height:
<size
android:width="@dimen/switch_track_width"
android:height="@dimen/switch_track_height" />
虽然可以解决您的问题,但我建议在 res/values-v21 目录中再添加一个 dimens.xml 文件并添加
<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.
的宽度、高度和半径希望对您有所帮助。
您可以使用此小部件"android.support.v7.widget.switchcompat"。它支持向后兼容。
<size />
标签一切正常。 Drawable
已正确创建和应用。您的问题完全在 Switch
.
在 Lollipop 之前的旧版本中,拇指与文本一起使用,而可绘制对象只不过是缩放到所需大小的背景图像。您可以通过向 textOff
和 textOn
属性添加文本来验证这一点。此外,还定义了最小宽度。
所以只要加上一个0的switchMinWidth
和一个拇指一半直径的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>