自定义SwitchView

本文介绍了如何在Android中定制Switch组件的样式,包括调整滑块和滑道的高度差异,并展示了如何通过设置stroke来实现这一效果。此外,还提供了改变Switch字体颜色的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先介绍几个单词,thumb:滑块,track:滑道,Switch是由滑块和滑道组成的,在Switch中,滑块和滑道的高是相同的,而且是固定的,所以我们给Switch设置width+height不会改变它的宽高。
参考: http://mp.weixin.qq.com/s/PlUN1LNumTycnLJZhWztTw

那么怎么设置滑块的高度超过滑道的高度呢?或者滑道的高度超过滑块的高度?

通过给height小的设置stroke(transparent)达到缩小高度的目的。

这里写图片描述

给滑道设置了stroke

这里写图片描述

<Switch
    android:layout_width="wrap_content"  
    android:layout_height="wrap_content"  
    android:layout_marginTop="10dp"  
    android:thumb="@drawable/thumb_selector"  
    android:track="@drawable/track_selector" />  

thumb_selector.XML

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/thumb_on" android:state_checked="true"/>
    <item android:drawable="@drawable/thumb_off" android:state_checked="false"/>
</selector>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <solid android:color="#32CD32" />
    <size
        android:width="20dp"
        android:height="20dp" />
</shape>

thumb_off:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
    <solid android:color="#fff"/>
    <size android:width="20dp" android:height="20dp"/>
</shape>

track_selector.XML

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/track_on" android:state_checked="true"/>
    <item android:drawable="@drawable/track_off" android:state_checked="false"/>
</selector>

track_on:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <stroke
        android:width="5dp"
        android:color="@android:color/transparent" />
    <solid android:color="#3332CD32" />
    <corners android:radius="20dp" />
</shape>

track_off

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <stroke
        android:width="5dp"
        android:color="@android:color/transparent" />
    <solid android:color="#AAA" />
    <corners android:radius="20dp" />
</shape>

给滑块设置了stroke

这里写图片描述

<Switch
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="10dp"
    android:thumb="@drawable/thumb_selector_ios"
    android:track="@drawable/track_selector_ios" />

thumb_selector_ios.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/thumb_on_ios" android:state_checked="true" />
    <item android:drawable="@drawable/thumb_off_ios" android:state_checked="false" />
</selector>

thumb_on_ios:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
    <stroke
        android:width="5dp"
        android:color="@android:color/transparent" />
    <solid android:color="@android:color/white" />
    <size
        android:width="20dp"
        android:height="20dp" />
</shape>

thumb_off_ios:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
    <stroke
        android:width="5dp"
        android:color="@android:color/transparent" />
    <solid android:color="@android:color/white" />
    <size
        android:width="20dp"
        android:height="20dp" />
</shape>

track_selector_ios

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/track_on_ios" android:state_checked="true"/>
    <item android:drawable="@drawable/track_off_ios" android:state_checked="false"/>
</selector>

track_on_ios:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <solid android:color="#32CD32" />
    <corners android:radius="20dp"/>
</shape>

track_off_ios:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <solid android:color="#AAA" />
    <corners android:radius="20dp" />
</shape>

改变字体颜色

这里写图片描述

android:switchTextAppearance="@style/SwitchTextColor"

SwitchTextColor:

<style name="SwitchTextColor" parent="@android:style/TextAppearance.Small">
    <item name="android:textColor">@color/thumb_text_color_selector</item>
</style>

thumb_text_color_selector:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="#000" android:state_checked="true"/>
    <item android:color="#FFF" android:state_checked="false"/>
</selector>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值