Android学习笔记_S01_E01 ToggleButton(开关按钮)和Swith(开关)的功能与用法

一、基本定义

ToggleButton(开关按钮)和Swith(开关)都是Button派生出来的,它们的本质也是按钮,也支持Button的各种属性、方法。 ToggleButton和Swith通常用于切换程序中的某种状态。

二、属性

  1、ToggleButton支持的XML属性及相关方法

xml属性 相关方法 说明
android:checked setCheck(boolean) 设置该按钮是否被选中
android:textOff   设置当该按钮的状态关闭时显示的文本
android:textOn   设置当该按钮的状态打开时显示的文本

  2、Switch支持的XML属性及相关方法说明

XML属性 相关方法  说明
Android:checked setChecked(boolean) 设置该开关是否被选中   
Android:switchMinWidth  setSwitchMinWidth(int) 设置该开关的最小宽度 
Android:switchPadding  setSwitchPadding(int)  设置开关与标题文本之间的空白 
Android:switchTextAppearance  setSwitchTextAppearance(Context,int) 设置该开关图标上的文本样式 
Android:textOff  setTextOff(charSequence) 设置该开关的状态关闭时显示的文本 
Android:textOn  setTextOn(charSequence) 设置该开关的状态打开时显示的文本 
Android:textStyle  setSwitchTypeface(Typeface) 设置该开关的文本风格 
Android:thumb  setThumbResource(int) 指定使用自定义Drawable绘制该开关的开关按钮 
Android:track  setTrackResource(int) 指定使用自定义Drawable绘制该开关的开关轨道 
Android:typeface  setSwitchTypeface(Typeface) 设置该开关的文本的字体风格 

三、实现效果

  通过ToggleButton或者Switch控制文本的水平或垂直排列方式。

  ToggleButton也有同样的效果。

四、编写过程

  1、建立项目后,在activity_main.xml文件中建立线性布局(LinearLayout),并设置为垂直方向。

1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2     xmlns:tools="http://schemas.android.com/tools"
3     android:layout_width="match_parent"
4     android:layout_height="match_parent"
5     android:orientation="vertical"
6     tools:context=".MainActivity" >

 2、在该LinearLayout中增加一个ToggleButton、一个Switch和一个LinearLayout。设置LinearLayout的id为text,默认方向为水平,并设置ToggleButton和Switch的checked属性为false。checked属性是指默认状态,其值是根据ToggleButton或Switch的textOn属性相对应的,如果设置textOn为横向布局,则checked属性为true。

 1  <ToggleButton
 2         android:id="@+id/toggleButton"
 3         android:layout_width="wrap_content"
 4         android:layout_height="wrap_content"
 5         android:textOn="纵向排列"
 6         android:textOff="横向排列"
 7         android:checked="false"/>
 8
 9     <Switch
10         android:id="@+id/switcher"
11         android:layout_width="wrap_content"
12         android:layout_height="wrap_content"
13         android:textOn="纵向排列"
14         android:textOff="横向排列"
15         android:checked="false"/>
16
17     <LinearLayout
18         android:id="@+id/test"
19         android:layout_width="match_parent"
20         android:layout_height="match_parent">

 3、在新增的LinearLayout中增加三个TextView,用于显示效果。

 1 <TextView
 2             android:layout_width="wrap_content"
 3             android:layout_height="wrap_content"
 4             android:background="#00ff00"
 5             android:textSize="20sp"
 6             android:text="测试文本一"/>
 7
 8         <TextView
 9             android:layout_width="wrap_content"
10             android:layout_height="wrap_content"
11             android:background="#00ffff"
12             android:textSize="20sp"
13             android:text="测试文本一"/>
14
15         <TextView
16             android:layout_width="wrap_content"
17             android:layout_height="wrap_content"
18             android:background="#ffff00"
19             android:textSize="20sp"
20             android:text="测试文本一"/> 

  4、在MainActivity中建立三个变量,分别是ToggleButton、Switch和LinearLayout,并通过findViewById()方法找到XML文件中的控件。

 1 private ToggleButton toggleButton;
 2      private Switch switcher;
 3      private LinearLayout layout;
 4
 5     @Override
 6     protected void onCreate(Bundle savedInstanceState) {
 7         super.onCreate(savedInstanceState);
 8         setContentView(R.layout.activity_main);
 9
10         toggleButton = (ToggleButton) findViewById(R.id.toggleButton);
11         switcher = (Switch) findViewById(R.id.switcher);
12         layout = (LinearLayout) findViewById(R.id.test);
13         

  5、在MainActivity中新建Listener监听器并实现OnCheckedChangeListener接口,复写OnCheckedChangeListener接口中的onCheckedChanged(CompoundButton buttonView,boolean isChecked)方法。该方法的第一个参数(CompoundButton)是指Listener监听器所绑定的Button组件,第二个参数(boolean)是指该Button组件的checked属性。

  在Listener监听器中,根据Button组件的checked属性判断LinearLayout中三个TextView的排列方式。如果是true,则垂直排列,通过LinearLayout的setOrientation(int)方法设置,int值为1(即真);如果是false,则水平排列,通过LinearLayout的setOrientation(int)方法设置,int值为除1以外的其他任何整数(即假)。

 1 class Listener implements OnCheckedChangeListener{
 2
 3         @Override
 4         public void onCheckedChanged(CompoundButton buttonView,
 5                 boolean isChecked) {
 6             if(isChecked){
 7                 layout.setOrientation(1);
 8             }else{
 9                 layout.setOrientation(0);
10             }
11         }
12     }

  这是因为LinearLayout的Orientation属性默认是水平方向的,int是值应为false(即除1以外的其他任何整数),如果int值是1,则为垂直方向。这可以在LinearLayout的android:orientation=“XX”属性中进行验证:如果XX为1,则是垂直方向,否则都是水平方向,所以XX并不一定要填vertical或horizontal。

  6、在MainActivity的onCreate方法中新建Listener监听器,并通过Button的setOnCheckedChangeListener()绑定在ToggleButton和Switch上,从而实现按钮效果。

1 Listener listener = new Listener();
2         toggleButton.setOnCheckedChangeListener(listener);
3         switcher.setOnCheckedChangeListener(listener);

五、源代码

  1、layout文件下的 activity_main.xml代码。

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="1"
 6     tools:context=".MainActivity" >
 7
 8     <ToggleButton
 9         android:id="@+id/toggleButton"
10         android:layout_width="wrap_content"
11         android:layout_height="wrap_content"
12         android:textOn="纵向排列"
13         android:textOff="横向排列"
14         android:checked="false"/>
15
16     <Switch
17         android:id="@+id/switcher"
18         android:layout_width="wrap_content"
19         android:layout_height="wrap_content"
20         android:textOn="纵向排列"
21         android:textOff="横向排列"
22         android:checked="false"/>
23
24     <LinearLayout
25         android:id="@+id/test"
26         android:layout_width="match_parent"
27         android:layout_height="match_parent">
28
29         <TextView
30             android:layout_width="wrap_content"
31             android:layout_height="wrap_content"
32             android:background="#00ff00"
33             android:textSize="20sp"
34             android:text="测试文本一"/>
35
36         <TextView
37             android:layout_width="wrap_content"
38             android:layout_height="wrap_content"
39             android:background="#00ffff"
40             android:textSize="20sp"
41             android:text="测试文本一"/>
42
43         <TextView
44             android:layout_width="wrap_content"
45             android:layout_height="wrap_content"
46             android:background="#ffff00"
47             android:textSize="20sp"
48             android:text="测试文本一"/>
49
50     </LinearLayout>
51
52 </LinearLayout>

  2、MainActivity.ava代码。

 1 package com.example.togglebutton;
 2
 3 import android.R.layout;
 4 import android.os.Bundle;
 5 import android.app.Activity;
 6 import android.view.Menu;
 7 import android.widget.CompoundButton.OnCheckedChangeListener;
 8 import android.widget.CompoundButton;
 9 import android.widget.LinearLayout;
10 import android.widget.Switch;
11 import android.widget.ToggleButton;
12
13 public class MainActivity extends Activity {
14
15      private ToggleButton toggleButton;
16      private Switch switcher;
17      private LinearLayout layout;
18
19     @Override
20     protected void onCreate(Bundle savedInstanceState) {
21         super.onCreate(savedInstanceState);
22         setContentView(R.layout.activity_main);
23
24         toggleButton = (ToggleButton) findViewById(R.id.toggleButton);
25         switcher = (Switch) findViewById(R.id.switcher);
26         layout = (LinearLayout) findViewById(R.id.test);
27
28
29         Listener listener = new Listener();
30         toggleButton.setOnCheckedChangeListener(listener);
31         switcher.setOnCheckedChangeListener(listener);
32     }
33
34     class Listener implements OnCheckedChangeListener{
35
36         @Override
37         public void onCheckedChanged(CompoundButton buttonView,
38                 boolean isChecked) {
39             if(isChecked){
40                 layout.setOrientation(1);
41             }else{
42                 layout.setOrientation(0);
43             }
44         }
45     }
46 }

时间: 2024-11-06 07:32:23

Android学习笔记_S01_E01 ToggleButton(开关按钮)和Swith(开关)的功能与用法的相关文章

Android学习笔记——关于onConfigurationChanged

从事Android开发,免不了会在应用里嵌入一些广告SDK,在嵌入了众多SDK后,发现几乎每个要求在AndroidManifest.xml申明Activity的广告SDK都会要求加上注明这么一句属性: android:configChanges="orientation|keyboard|keyboardHidden" 通过查阅Android API可以得知android:onConfigurationChanged实际对应的是Activity里的onConfigurationChan

Android学习笔记18:自定义Seekbar拖动条式样

Android学习笔记18:自定义Seekbar拖动条式样

Pro Android学习笔记(三三):Menu(4):Alternative菜单

什么是Alternative menu(替代菜单) 举个例子,Activity显示一个文本文件.如果用户想对文本文件进行编辑,Activity不提供编辑能力,但可由其他activity或者其他应用提供.我们将相关信息存储在一个intent中,例如该文本的Uri.这个intent可以匹配系统的多个应用,替代菜单将这些应用一一列出,菜单项的title就是该可被调用的activity的名字,图标也为该可被调用的activity的图表. 小例子说明 我们通过一个小例子进行学习,简单地打开一个URL:we

Android学习笔记(二二): 多页显示-Tag的使用

在手机屏幕中,Tab也是比较常用的,通常和List结合,例如我们手机的通信录.下面是Tag的结构. TabHost是整个Tab的容器,包括两部分,TabWidget和FrameLayout.TabWidget就是每个tab的标签,FrameLayout则是tab内容. 如果我们使用extends TabAcitivty,如同ListActivity,TabHost必须设置为@android:id/tabhost TabWidget必须设置android:id为@android:id/tabs F

android学习笔记--android启动过程之init.rc文件浅析

1.  init.rc文件结构文件位置:init.c  : /system/core/initinit.rc  : /system/core/rootdir 首先init.rc文件是以模块为单位的,每个模块里的内容都是一起执行的,模块分为3种类型:on.service.import.我们可以看下init.rc文件是怎么写的:1.import import /init.usb.rc import /init.${ro.hardware}.rc import /init.trace.rc 上面的内容

android学习笔记——利用BaseAdapter生成40个列表项

RT: main.xml ? 1 2 3 4 5 6 7 8 9 10 11 12 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"               android:orientation="vertical"        

Android学习笔记_78_ Android开发中使用软引用和弱引用防止内存溢出

在<Effective Java 2nd Edition>中,第6条"消除过期的对象引用"提到,虽然Java有 垃圾回收机制,但是只要是自己管理的内存,就应该警惕内存泄露的问题,例如的对象池.缓存中的过期对象都有可能引发内存泄露的问题.书中还提到可以用 WeakHashMap来作为缓存的容器可以有效解决这一问题.之前也确实遇到过类似问题,但是没有接触过"弱引用"相关的问题,于是查阅了一些资料. <Java 理论与实践: 用弱引用堵住内存泄漏>

Android学习笔记(十四)——在运行时添加碎片(附源码)

在运行时添加碎片 点击获取源码 将UI分割为多个可配置的部分是碎片的优势之一,但其真正强大之处在于可在运行时动态地把它们添加到活动中. 1.使用上一篇创建的Fragments项目,在main.xml文件中注释掉两个<fragment>元素: 2.在FragmentActivity.java中添加下面的代码: FragmentManager fragmentManager = getSupportFragmentManager();//向活动添加碎片 FragmentTransaction fr

Android学习笔记(十五)——碎片的生命周期(附源码)

碎片的生命周期 点击下载源码 与活动类似,碎片具有自己的生命周期.理解了碎片的生命周期后,我们可以在碎片被销毁时正确地保存其实例,在碎片被重建时将其还原到前一个状态. 1.使用上一篇的项目Fragments,在Fragment1.java文件中添加如下代码: package net.zenail.Fragments; import android.app.Activity; import android.os.Bundle; import android.support.v4.app.Fragm