Android 自定义 Switch 被剪裁/切断

dei*_*mus 5 android android-xml android-switch

我有一个自定义的 android 开关,其定义如下

<Switch
    android:id="@+id/create_site_switch_ssl"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical|left"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp"
    android:paddingLeft="50dp"
    android:paddingRight="50dp"
    android:checked="true"
    android:gravity="center_vertical"
    android:thumb="@drawable/btn_gradient" />
Run Code Online (Sandbox Code Playgroud)

和拇指选择器项目像这样

<item android:state_enabled="true" android:state_focused="false" android:state_pressed="false">
    <shape android:shape="rectangle">    
        <gradient
            android:startColor="@color/Blue100"
            android:endColor="@color/Blue50"
            android:angle="90"/>    
        <padding android:left="@dimen/button_padding"
            android:top="@dimen/button_padding"
            android:right="@dimen/button_padding"
            android:bottom="@dimen/button_padding" />    
        <corners android:radius="@dimen/button_corner"/>    
        <stroke android:color="@color/BlueBorder" android:width="5dp"/>    
    </shape> 
</item>
Run Code Online (Sandbox Code Playgroud)

在 Android 版本 4.3、4.4.2 上,开关滑块在右侧和左侧像这样被剪切。

在此输入图像描述

我尝试使用形状和开关的填充/边距/大小,到目前为止没有任何效果。

此外,使用适当的填充设置自定义轨道也不起作用。

在Android 5.0及更高版本上,通过设置解决了问题

android:paddingLeft 
android:paddingRight
Run Code Online (Sandbox Code Playgroud)

为什么填充对于更高版本不起作用?我缺少什么?欢迎任何有关解决方案的提示!

323*_*3go 1

我遇到过同样的问题。从可绘制对象中删除填充属性为我解决了这个问题。在你的情况下,它看起来像这样:

<item android:state_enabled="true" android:state_focused="false" android:state_pressed="false">
    <shape android:shape="rectangle">    
        <gradient
            android:startColor="@color/Blue100"
            android:endColor="@color/Blue50"
            android:angle="90"/>    
        <corners android:radius="@dimen/button_corner"/>    
        <stroke android:color="@color/BlueBorder" android:width="5dp"/>    
    </shape> 
</item>
Run Code Online (Sandbox Code Playgroud)

然后您可以将填充添加到开关:

<Switch
    android:id="@+id/create_site_switch_ssl"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical|left"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp"
    android:paddingLeft="50dp"
    android:paddingRight="50dp"
    android:checked="true"
    android:drawablePadding="@dimen/button_padding"
    android:gravity="center_vertical"
    android:thumb="@drawable/btn_gradient" />
Run Code Online (Sandbox Code Playgroud)