小白7码-android原生开发皮毛系列(3)-Switch

1,804 阅读5分钟

在上两章,小白简单介绍了一下android内建控件中TextView, Button以及Checkbox的基础用法,具体请见:

  1. 小白7码-android原生开发皮毛系列-TextView
  2. 小白7码-android原生开发皮毛系列(2)-Button以及Checkbox

在这一章,小白将略微介绍一下Switch即所谓的切换按钮的基础用法。Switch是小白比较喜欢的一个控件,在某些场景上表现得很简洁明了,直中主题,例如事物的状态,开关等。所以通常在较少的选项的情况下,我通常会选择使用多个Switch代替Checkbox。言归正传,让我们开始了解一下Switch吧。Switch和Checkbox按道理来说师出同门,其用法跟Checkbox应该差不多。事实也确实如此,Switch和Checkbox大体使用可谓如出一则。但是在一些个性化定制上,Switch和Checkbox却又迥然不同。首先让我们了解一下Switch的组成结构,这还是很有必要的,如下图所示:

                                                图1 Switch组成结构

如上图所示,android中Switch大体分为两个部分:text(文本)和 button(按钮),而button部分在Switch可以分为更为细致的两部分:track(滑轨)和 thumb(指示按钮)。如上图所示,thumb会随着Switch的check状态而改变,所以千万不要认为thumb就是指check为true时候上图深绿色圆圆的按钮。其实不是,它只是指圆圆的按钮,但是圆圆的按钮会随check的状态改变颜色和位置。千万别搞错了。thumb同样可以显示文本,同样根据Switch的check状态,在check为true的时候,则显示textOn属性中的文本。而在check为false的时候,则显示textOff属性中的文本。Switch的基本结构我想大家应该已经清楚。那么让我们来熟悉一下Switch的基本用法。

  1. 设置文本

对于Switch的text属性设置,小白就不再累述了。如果想了解text属性的具体用法,请参见第一章小白7码-android原生开发皮毛系列-TextView。这里主要介绍Switch的thumb文本的设置即图1中的“是”与“否”。

  • showText属性:通过showText可以控制Switch的thumb的文本显示或不显示。这个属性再Android API 21+起作用.
  • textOn与textOff属性:textOn与textOff属性用于设置Switch控件在check为true和false的状态下的文本。在Android API 21(不包括)以下版本,通过设置这两个属性设置就可以控制thumb文本的显示,而无需借助showText。而在Android API 21+版本,则需要showText控制属性配合使用。
  • switchTextAppearance属性:用于控制textOn与textOff的文本样式。记得不用通过style或者textAppearance设置thumb文本的样式。同时switchTextAppearance只接受文本类属性例如字体,字体颜色等,不接受任何布局或者其他不属于文本的属性。

下面我们以上面一个实例,但是设置一个蓝色文本为例.

  • 在colors.xml文件添加switch文本颜色。

    < color name="switchColor">#2457DA</ color>

  • 在styles.xml文件中添加一个style用于switchTextAppearance。

    <item name="android:textColor">@color/switchColor</item> <item name="android:textSize">12dp</item> <item name="android:textStyle">bold</item>
  • 在strings.xml文件添加on和off的文本

    < string name="switchTextOn">是</ string> < string name=“switchTextOff">否</ string>

  • 给switch设置switchTextAppearance和文本

最后,对于Switch默认的thumb文本设置我要说一点,Switch的thumb大小并不会随文本多少而变化,相反thumb的大小默认是固定的。所以请谨慎选择文本,确定文本字数,最好用单字。如果设置过多的文本,那么控件显示如下:

                                  

                                                        图3 thumb过多文本

  1. 个性化定制

Switch控件的个性化定制是小白必讲的一节。但是对于Switch的个性化定制或者准确的说是Switch的track和thumb的个性化定制小白目前也是一知半解。小白只能将自己领悟的一些给大家介绍一下。就如上面小节提到的,thumb默认大小固定,但是如果你需要个可以包裹较多文字的thumb通常需要自定义。然后请大家记住下面的公式:

track****的大小 **= thumb****大小(包括文字部分)**x 2

即Switch按钮部分的大小大体是thumb大小的两倍,所以不要通过layout_width或者width属性来控制Switch按钮部分的大小。这两个属性有可能会让你得到一个被裁减掉一部分的奇怪的Switch按钮。

那么让我们以下图的例子为模版,学习一下Switch的个性化定制。

                                

                                                       图4 类IOS切换按钮

  • 在colors.xml定义必要的颜色分别用于track滑轨的颜色,thumb在check为true和false下按钮的颜色:

    < color name="colorButton">#5080FB</ color> < color name="colorButtonDark">#2457DA</ color>

    < color name="colorGray">#cccccc</ color> < color name="colorDarkGray">#555555</ color>

  • 新建一个shape资源文件用于switch的track背景,并设置高度和圆角,切记不要设置宽度,会出现奇怪的显示。

  • 新建一个selector资源文件用于switch的thumb按钮。

  • 给Switch应用track和thumb背景

通过上述步骤你就可以得到一个IOS相仿的Switch。通过track属性和thumb你可以定制多数你想要的个性化要求。同时你可以通过设置textOn和textOff配合trumb的矢量背景中width的设置来调节容纳多少个文字。还有一个非常好用的属性thumbTextPadding。这个属性也可以调节容纳多少文字,如下图所示:

                                               图5 无thumbTextPadding vs 有thumbTextPadding

结论

对于Switch的基础使用就介绍到这里了,希望对格外有所帮助。请务必要了解清楚Switch控件的组成部分,这样你才能对症下药。对于Switch的个性化定制可能稍微要费点功夫,但是效果可能会让你有所惊喜。