自定义切换 - 轨道和选择器尺寸在21 API

时间:2016-08-29 12:34:53

标签: android xml android-switch

自定义形状开关如下所示:

以上API 21

enter image description here

API 21以下

enter image description here

似乎<size/>块在<shape/>中对于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>

3 个答案:

答案 0 :(得分:11)

使用<size />标记一切正常。 Drawable已正确创建并应用。您的问题完全在Switch

之内

在旧版本中,在Lollipop之前,拇指与文本一起使用,而drawable只不过是一个缩放到必要大小的背景图像。您可以通过向textOfftextOn属性添加文字来验证这一点。此外,还定义了最小宽度。

所以只需添加一个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>

答案 1 :(得分:1)

我已复制你的代码并尝试在我的机器中实现,在<size> width属性里面的drawable / switch_selector.xml中的第一件事应该是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的宽度,高度和半径。

希望它会有所帮助。

答案 2 :(得分:0)

您可以使用此小部件“android.support.v7.widget.switchcompat”。它支持向后兼容性。