开关组件(Switch)

文章内容

 

 

1. Switch组件介绍

 

2. 使用Switch组件

 

3. 实例代码

 

 

 

1. Switch组件介绍

 

它是由API 14(Android 4.0, 4.0.1, 4.0.2)引入的新组建,是一种“组合按钮”,即继承了CompoundButton。就像CheckBox,RadioButton,  及ToggleButton一样, 它拥有两种状态分别表示“开启”和“关闭”。可以通过点击拖动来切换状态,默认情况下,每个状态上有一个用来显示当前状态的文本信息,比如,“ON”和“OFF”,不过也可以根据其控制的功能来自定义其显示文本。

 

默认设置下,Switch组件的样子如下:

 

            

               (开启)                                    (关闭)   

 

 

 

2. 使用Switch组件

 

使用该组件时,应该重点关注在其状态发生变化时我们应该作何反应。即,我们需要监听switch组件的状态的变化。很幸运,合理的需求和想像大都可以得到满足,switch的基类内部类CompoundButton.OnCheckedChangeListener帮了我们一个大忙。所以,我们的活动在使用switch时,可以实现CompoundButton.OnCheckedChangeListener接口,并实现其内部的onCheckedChanged方法。

 

除了关注Switch的状态变化外,我们可以做的更多,比如可以改变组件的外观。或许下面方法和属性可以实现这一点:

 

  • setSwitchTextAppearance(Context context, int resid) 使用指定的资源id设置状态标签上的文字大小,类型,颜色等;
  • setSwitchTypeface(Typeface tf, int style)  使用指定的字体类型库内的指定类型来设置状态标签上的文字;
  • setSwitchTypeface(Typeface tf) 使用指定字体类型库内的固有类型来设置状态标签上的文字;
  • setTextOff(CharSequence textOff) 设置“关闭”状态标签文字;
  • setTextOn(CharSequence textOn) 设置“开启”状体标签文字;
  • 父类内的setButtonDrawable(int resid) 用指定的资源id设置组件背景;
  • 父类内的 setButtonDrawable( Drawable d) 用可绘制对象设置组件背景;
  • android:textStyle  和 android:typeface  与setSwitchTypeface( Typeface tf)对应;

 

 android:textStyle的值必须是下面中的一个,或是它们的组合(|):

 

normal 0
bold 1
italic 2

 

android:typeface的值必须是下面中的一个:

 

normal 0
sans 1
serif 2
monospace 3
 

 

 

3. 实例代码

 


3.1 布局文件R.layout.switches


<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2010 The Android Open Source Project

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at
     
     http://www.apache.org/licenses/LICENSE-2.0
     
     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
  -->
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="match_parent" >

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <Switch android:text="Standard switch"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="32dip" />

        <Switch android:text="Default is on"
                android:checked="true"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="32dip" />

        <Switch android:id="@+id/monitored_switch"
                android:text="Monitored switch"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginBottom="32dip" />

        <Switch android:text="Customized text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textOn="开启"
                android:textOff="关闭"
                android:layout_marginBottom="32dip" />

        <Switch android:text="This is an example of a switch with a lot of text in it. It may end up wrapping to another line. The switch will be pinned at the top."
                android:singleLine="false"
                android:layout_width="300dip"
                android:layout_height="wrap_content"
                android:gravity="top|left"
                android:layout_marginBottom="32dip" />

        <Switch android:text="This is an example of a switch with a lot of text in it. It may end up wrapping to another line. The switch will be vertically centered."
                android:singleLine="false"
                android:layout_width="300dip"
                android:layout_height="wrap_content"
                android:gravity="center_vertical|left"
                android:layout_marginBottom="32dip" />

        <Switch android:text="This is an example of a switch with a lot of text in it. It may end up wrapping to another line. The switch will be pinned at the bottom."
                android:singleLine="false"
                android:layout_width="300dip"
                android:layout_height="wrap_content"
                android:gravity="bottom|left"
                android:layout_marginBottom="32dip" />

        <Switch android:text="Switch with match_parent width"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="32dip" />

        <TextView android:text="Standalone switch below:"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content" />

        <Switch android:layout_width="wrap_content"
                android:layout_height="wrap_content" />

    </LinearLayout>
</ScrollView>


3.2 Java代码:


public class Switches extends Activity implements CompoundButton.OnCheckedChangeListener {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       
        setContentView(R.layout.switches);
        
        Switch s = (Switch) findViewById(R.id.monitored_switch);
        if (s != null) {
            s.setOnCheckedChangeListener(this);
        }
    }
   
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
       Toast.makeText(this, "Monitored switch is " + (isChecked ? "on" : "off"),
               Toast.LENGTH_SHORT).show();
    }
}


3.3 运行结果:


开关组件(Switch)_第1张图片


最后需要注意的是,Switch控件的text属性(如:android:text="Standard switch")作为控件组成的一部分也会响应用户的交互。即,在text属性内容上点击时也会切换控件的状态。而要想通过拖动来改变控件状态时,则只能在控件本身上(不包括text属性内容)进行拖动。



                                                                                                                   2012年6月5日,毕




 

 

你可能感兴趣的:(android,layout,express,encoding,permissions,RadioButton)