Switch控件

本文介绍了如何修改Android中的Switch样式,包括全局和单个Switch的定制。详细讲解了在style中定义样式,滑块及轨道的ON/OFF状态,滑块中间状态动画,以及如何监听Switch状态变化的方法。提醒读者,对于复杂的图形,可能需要UI设计师的协助。

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

修改Switch样式

用于修改全局Switch样式,如果要改单个的,可以单独引用主题;

一、 在style中定义Switch样式

<style name="SwitchStyle" parent="@style/Widget.AppCompat.CompoundButton.Switch">
    <item name="android:showText">false</item>
    <item name="android:thumb">@drawable/switch_thumb</item>
    <item name="android:track">@drawable/switch_track</item>
</style>

二、在对应的主题的引用

<style name="LoginThemeNoTitle" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">#F5F0F0</item>
    <item name="colorPrimaryDark">#F5F0F0</item>
    <item name="colorAccent">#8F8B8B</item>
    <item name="android:switchStyle">@style/SwitchStyle</item>
</style>

三、滑块 drawable/switch_thumb

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

    <item
        android:id="@+id/switch_on"
        android:state_checked="true"
        android:drawable="@drawable/switch_thumb_on"/>
    <item
        android:id="@+id/switch_off"
        android:state_checked="false"
        android:drawable="@drawable/switch_thumb_off"/>

    <!-- 动画 没有动画的话 以下代码干掉 -->
    <transition
        android:fromId="@+id/switch_on"
        android:toId="@+id/switch_off">
        <animation-list>
            <item
                android:drawable="@drawable/switch_thumb_1"
                android:duration="30" />
            <item
                android:drawable="@drawable/switch_thumb_2"
                android:duration="30" />
            <item
                android:drawable="@drawable/switch_thumb_3"
                android:duration="30" />
            <item
                android:drawable="@drawable/switch_thumb_4"
                android:duration="30" />
            <item
                android:drawable="@drawable/switch_thumb_5"
                android:duration="30" />
            <item
                android:drawable="@drawable/switch_thumb_4"
                android:duration="30" />
            <item
                android:drawable="@drawable/switch_thumb_3"
                android:duration="30" />
            <item
                android:drawable="@drawable/switch_thumb_2"
                android:duration="30" />
            <item
                android:drawable="@drawable/switch_thumb_1"
                android:duration="30" />
            <item
                android:drawable="@drawable/switch_thumb_off"
                android:duration="30" />
        </animation-list>
    </transition>
    <transition
        android:fromId="@+id/switch_off"
        android:toId="@+id/switch_on">
        <animation-list>
            <item
                android:drawable="@drawable/switch_thumb_1"
                android:duration="30" />
            <item
                android:drawable="@drawable/switch_thumb_2"
                android:duration="30" />
            <item
                android:drawable="@drawable/switch_thumb_3"
                android:duration="30" />
            <item
                android:drawable="@drawable/switch_thumb_4"
                android:duration="30" />
            <item
                android:drawable="@drawable/switch_thumb_5"
                android:duration="30" />
            <item
                android:drawable="@drawable/switch_thumb_4"
                android:duration="30" />
            <item
                android:drawable="@drawable/switch_thumb_3"
                android:duration="30" />
            <item
                android:drawable="@drawable/switch_thumb_2"
                android:duration="30" />
            <item
                android:drawable="@drawable/switch_thumb_1"
                android:duration="30" />
            <item
                android:drawable="@drawable/switch_thumb_on"
                android:duration="30" />
        </animation-list>
    </transition>
    
</animated-selector>

四、滑块的ON/OFF

switch_thumb_on

<?xml version="1.0" encoding="utf-8"?>

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <size
        android:width="@dimen/switch_thumb_size"
        android:height="@dimen/switch_thumb_size" />
    <solid android:color="@android:color/white" />
    <stroke
        android:width="@dimen/switch_thumb_stroke"
        android:color="#0000" />

</shape>

switch_thumb_off

<?xml version="1.0" encoding="utf-8"?>

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <size
        android:width="@dimen/switch_thumb_size"
        android:height="@dimen/switch_thumb_size" />
    <solid android:color="@android:color/white" />
    <stroke
        android:width="@dimen/switch_thumb_stroke"
        android:color="#0000" />

</shape>

五、滑块的中间状态

<?xml version="1.0" encoding="utf-8"?>

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <size
        android:width="@dimen/switch_thumb_size_1"
        android:height="@dimen/switch_thumb_size_1" />
    <solid android:color="@android:color/white" />
    <stroke
        android:width="@dimen/switch_thumb_stroke_1"
        android:color="#0000" />

</shape>

中间状态可以多设置几个,让动画看起来柔和;

改变滑块大小的动画,只要注意switch_thumb_size_1+switch_thumb_stroke_1=switch_thumb_size+switch_thumb_stroke即可;

六、背景/滑道 switch_track

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

    <item
        android:state_checked="true"
        android:drawable="@drawable/switch_track_on"></item>
    <item
        android:state_checked="false"
        android:drawable="@drawable/switch_track_off"></item>
</selector>

七、滑道的ON/OFF

switch_track_on

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="@color/orange" />
    <corners android:radius="@dimen/switch_track_radius" />
    <size
        android:width="@dimen/switch_track_width"
        android:height="@dimen/switch_track_height" />
</shape>

switch_track_off

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="@android:color/darker_gray" />
    <corners android:radius="@dimen/switch_track_radius" />
    <size
        android:width="@dimen/switch_track_width"
        android:height="@dimen/switch_track_height" />
</shape>

监听状态变化

setOnCheckedChangeListener

写在后面

  • 用到复杂的图形,需要UI提供;
  • 就算知道了矢量图的语法,普通程序猿一般也写不出牛逼的矢量图动画;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值