一、安卓开关Switch介绍

android官方文档对于Switch的定义:

Switch 是一个双状态切换开关小部件,可以在两个选项之间进行选择。用户可以来回拖动“拇指”以选择所选选项,或者只需点击即可切换,就好像它是一个复选框一样。该属性控制开关的标签中显示的文本,而 和 文本控制拇指上的文本。类似地,和相关的 setTypeface() 方法控制标签文本的字体和样式,而和相关的 setSwitchTypeface() 方法控制缩略图的字体和样式。

Switch的相关属性,如下图: 

android Switch设置打开 安卓手机 switch_Android

二、原生Switch缩放

在日常使用中,如果我们使用原生的Switch,当我们想要改变Switch的大小时,会发现通过改变layout_width,layout_height属性是无法改变开关控件的大小,只能改变开关占地大小,当然上图中也提到了Switch的 android:switchMinWidth 属性,可惜的是,这个属性只能改变Switch的宽度,如果你使用了这个属性,最终你将得到这样一个开关。

android Switch设置打开 安卓手机 switch_android_02


Switch的代码如下:

<Switch
	android:id="@+id/bag_setting_switch"
	android:layout_width="wrap_content"
	android:layout_height="200dp"
	android:switchMinWidth="150dp"/>

这样的样子恐怕没法得到项目经理的认可,这时,我们可以通过设置scaleX和scaleY属性来进行缩放,同时配合android:switchMinWidth来使Switch的形态看上去更加修长(当然,你也可以通过更改Switch的样式定制你喜欢的开关,这里放个链接修改原生Switch组件的样式,类似的博客站内还有很多)。

<Switch
	android:id="@+id/bag_setting_switch"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:scaleX="1.5"
	android:scaleY="1.5"
	android:switchMinWidth="50dp"/>

三、Switch的开关控制

通过阅读Android官方文档,我们可以看到Switch的继承关系:

android Switch设置打开 安卓手机 switch_android_03


通过这张图,我们不难看出,Switch继承自Android的button类,所以,我们可以使用 setChecked(false) 来设置Switch的开关状态,同时可以使用 setOnCheckedChangeListener 方法来监听Switch的开关变化。例子如下:

//这里的v ->和下面的(compoundButton, b) ->是lambda表达式用法
	switch_cl.setOnClickListener(v -> {
            if (flag) {
                flag = false;
                mSwitch.setChecked(false);
            } else {
                flag = true;
                mSwitch.setChecked(true);
            }
        });


	mSwitch.setOnCheckedChangeListener((compoundButton, b) -> {
            if (b) {
                bagSwitchCache.put("1");
                Toast.makeText(BagSettingActivity.this, "自动发袋已开启", Toast.LENGTH_SHORT).show();
            } else {
                bagSwitchCache.put("0");
                Toast.makeText(BagSettingActivity.this, "自动发袋已关闭", Toast.LENGTH_SHORT).show();
            }
        });