Android 自定义Switch
一、效果图
![]()

二、代码实现
这里使用的是SwitchCompat
正常项目中是有该库,如果没有,可以选择版本添加依赖库:
implementation 'androidx.appcompat:appcompat:1.6.1'
XML布局:
<LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"android:gravity="center_vertical"android:padding="16dp"><TextViewandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="自定义开关"android:textSize="16sp" /><androidx.appcompat.widget.SwitchCompatandroid:id="@+id/switch_bluetooth"android:layout_width="wrap_content"android:layout_height="wrap_content"style="@style/CustomSwitch"/></LinearLayout>自定义样式的 Switch
自定义stytle样式,在stytles.xml中添加
<style name="CustomSwitch" parent="Widget.AppCompat.CompoundButton.Switch"><item name="android:thumb">@drawable/custom_thumb</item><item name="track">@drawable/custom_track</item><item name="android:minWidth">@dimen/dp_50</item><item name="android:minHeight">@dimen/dp_24</item></style>自定义 thumb 和 track
thumb(滑动按钮)和track(滑动轨道)
res/drawable/custom_thumb.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><!--选中时按钮圆角和背景色 --><item android:state_checked="true"><shape android:shape="oval"><solid android:color="#FFFFFF" /><size android:width="@dimen/dp_26" android:height="@dimen/dp_24" /></shape></item><!--未选中时按钮圆角和背景色 --><item><shape android:shape="oval"><solid android:color="#FFFFFF" /><size android:width="@dimen/dp_26" android:height="@dimen/dp_24" /></shape></item>
</selector>res/drawable/custom_track.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><!--选中时轨道圆角和背景色 --><item android:state_checked="true"><shape android:shape="rectangle"><corners android:radius="@dimen/dp_16" /><solid android:color="?attr/buttonColorPrimary" /></shape></item><!--未选中时轨道圆角和背景色 --><item><shape android:shape="rectangle"><corners android:radius="@dimen/dp_16" />
<!-- <solid android:color="?attr/buttonColorSixth" />--><solid android:color="#CCCCCC" /></shape></item></selector>在Activity中设置监听:
mBinding.switchBluetooth.setOnCheckedChangeListener { buttonView, isChecked ->Log.d("BBBBB","isChecked:$isChecked")}