Android自定义开关被剪裁/截断

4

我有一个自定义的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" />

并且拇指选择器项长这个样子

<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>

在Android 4.3和4.4.2版本上,开关滑块的左右两侧会出现裁剪情况,如下图所示:enter image description here。我尝试调整形状、开关的padding/margin/size等参数,但都没有解决问题。另外,设置适当的padding也不能解决问题。
在Android 5.0及以上版本中,可以通过设置...(后面未给出完整信息)来解决这个问题。
android:paddingLeft 
android:paddingRight

为什么在较新版本中填充(padding)不起作用?我错过了什么吗? 欢迎提供任何解决方案的提示!
2个回答

1

我知道这有点晚了,但这是为了其他遇到同样问题的人。对我来说,解决方案是设置负填充。因此,如果您的开关在右侧被切断,则将右填充设置为负数,例如-5或-10,具体取决于开关被切断的程度。


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>

您可以将填充添加到开关中:
<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" />

这只是我已经为自己实现的临时“解决方案”。在这种情况下,图形将无法正确绘制,即仅使用圆形/角半径大小绘制,而不是与填充不同的跟踪器区域最大值。 - deimus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接