Android—自定义开关按钮实现

时间:2022-01-03 12:43:50

我们在应用中经常看到一些选择开关状态的配置文件,做项目的时候用的是android的Switch控件,但是感觉好丑的样子…………

个人认为还是自定义的比较好,先上个效果图:

aaarticlea/png;base64,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" alt="" />

实现过程:

1.准备开关不同状态的两张图片放入drawable中。

2.xml文件中添加代码:

    <ToggleButton
android:id="@+id/switch1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:background="@android:color/transparent"
android:button="@drawable/btn_backgrounds"
android:checked="false"
android:textOff=""
android:textOn="" />
android:button="@drawable/btn_backgrounds"是自己定义的android selector文件:
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:drawable="@drawable/toggle_btn_on" />
<item android:drawable="@drawable/toggle_btn_off" />

3,之后在java文件中声明ToggleButton控件并且实例化,添加点击事件:

    /**
* 自己出创建的内部类,监听按钮点击事件
*
* @author cyf
*
*/
class MyOnCheckedChangeListener implements OnCheckedChangeListener { @Override
public void onCheckedChanged(CompoundButton arg0, boolean arg1) { if (arg1) {
// 开
} else {
// 关
} } }

4.添加监听:

switch1.setOnCheckedChangeListener((OnCheckedChangeListener) new MyOnCheckedChangeListener());

笔记备忘一下,这个没有Switch的滑动效果~~~