`
yanghaoli
  • 浏览: 288462 次
社区版块
存档分类
最新评论

Android

 
阅读更多

前言

这篇博客讲解一下Android平台下,RadioButton、CheckBox以及ToggleButton三个控件的用法,因为这三个控件之中都存在一个选中或是没选中的状态,所以放在一起讲解。

这三个控件均是从Button之中间接继承而来的,所以一些Button中的设置都是通用的,如图文混排,动态修改显示内容,因为之前已经对这些内容进行了说明,如果不清楚朋友可以参见一下我的另外一篇博客,Android—UIButton,所以这篇博客只是就这三个控件的常用方法进行简要说明,并给出示例。

 

CompoundButton

RadioButton(单选按钮)、CheckBox(复选按钮)、ToggleButton(开关按钮)都继承自android.widget.CompoundButton类,而CompoundButton又继承自Button类,在这个类中封装了一个checked属性,用于判断是否被选中,这也是它与Button的不同,对其进行了扩展,这个属性在这三个控件中的用法是一样的。

一般checked属性通过以下方式来设置与获取:

  • android:checked/setChecked(boolean):设置是否被选中。
  • isChecked():获取是否被选中。

 

RadioButton

RadioButton,为一个单选按钮,一般配合RadioGroup一起使用,在同一RadioGroup内,所有的RadioButton的选中状态为互斥,它们有且只有一个RadioButton被选中,但是在不同的RadioGroup中是不相互影响的。

下面通过一个简单的示例来说明一下,在示例中会存在两个RadioButton,用于定义性别信息,当用户选中了某个后,点击按钮,把选中的信息提示到屏幕上。

布局代码:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" >
 6 
 7     <TextView
 8         android:layout_width="fill_parent"
 9         android:layout_height="wrap_content"
10         android:text="Gender:" />
11     <!-- 定义一个RadioGroup用于包装RadioButton -->
12     <RadioGroup
13         android:id="@+id/gender"
14         android:layout_width="wrap_content"
15         android:layout_height="wrap_content" >
16 
17         <RadioButton
18             android:layout_width="wrap_content"
19             android:layout_height="wrap_content"
20             android:text="male" />
21 
22         <RadioButton
23             android:layout_width="wrap_content"
24             android:layout_height="wrap_content"
25             android:text="female" />
26     </RadioGroup>
27 
28     <Button
29         android:id="@+id/btnGender"
30         android:layout_width="fill_parent"
31         android:layout_height="wrap_content"
32         android:text="选择性别" />
33 
34 </LinearLayout>

实现代码:

 1 package com.example.changebutton;
 2 
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.view.View;
 6 import android.widget.Button;
 7 import android.widget.RadioButton;
 8 import android.widget.RadioGroup;
 9 import android.widget.Toast;
10 
11 public class RadioButtonActivity extends Activity {
12     private RadioGroup group;
13     private Button btnGender;
14 
15     @Override
16     protected void onCreate(Bundle savedInstanceState) {
17         // TODO Auto-generated method stub
18         super.onCreate(savedInstanceState);
19         setContentView(R.layout.radiobutton_layout);
20 
21         group = (RadioGroup) findViewById(R.id.gender);
22         btnGender = (Button) findViewById(R.id.btnGender);
23         btnGender.setOnClickListener(new View.OnClickListener() {
24             @Override
25             public void onClick(View v) {
26                 // 获取单选按钮的选项个数
27                 int len = group.getChildCount();
28                 String msgString = "";
29                 for (int i = 0; i < len; i++) {
30                     //RadioGroup中包含的子View就是一个RadioButton
31                     RadioButton radiobutton = (RadioButton) group.getChildAt(i);
32                     if (radiobutton.isChecked()) {
33                         //如果被选中,则break循环,并且记录选中信息
34                         msgString = "You choose to be a "
35                                 + radiobutton.getText().toString();
36                         break;
37                     }
38                 }
39                 if (msgString.equals("")) {
40                     Toast.makeText(RadioButtonActivity.this,
41                             "Please select a gender!", Toast.LENGTH_SHORT)
42                             .show();
43                 } else {
44                     Toast.makeText(RadioButtonActivity.this, msgString,
45                             Toast.LENGTH_SHORT).show();
46                 }
47             }
48         });
49     }
50 }

 

实现效果:


 

CheckBox

CheckBox是一个复选按钮,它的用法与RadioButton很像,但是与之不同的是,它可以多选,所以也无需用一个组控件包裹起来。

这里涉及了一动态添加UI控件的知识,在Android中动态增加控件一般有两种方式:

  1. 为需要操作的UI控件指定android:id属性,并且在Activity中通过setContentView()设置需要查找的布局文件。这样才可以在Activity中,使用findViewById(int)方法找到待操作的控件。
  2. 为需要操作的UI控件单独创建XML文件,在Activity中使用动态填充的方式:getLayoutInflater().inflate(int)的方式获取到XML文件定义的控件。

这里通过一个示例来说明CheckBox的使用,在示例中动态添加了CheckBox的选项,并且对其进行选中之后提示选中信息。上面两种方式都用用到,通过一个chooseMethod(boolean)区分。

布局代码:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" 
 6     android:id="@+id/checkLayout">
 7     <!-- 这里只是定义了一个按钮,其他的CheckBox控件在代码中动态添加 -->
 8     <Button
 9         android:id="@+id/checkBtn"
10         android:layout_width="fill_parent"
11         android:layout_height="wrap_content"
12         android:text="确定" />
13 
14 </LinearLayout>

如果使用动态填充的方式获取CheckBox的话,需要添加一个CheckBox的XML文件,代码如下:

1 <?xml version="1.0" encoding="utf-8"?>
2 <CheckBox xmlns:android="http://schemas.android.com/apk/res/android"
3     android:layout_width="match_parent"
4     android:layout_height="wrap_content"  >
5 </CheckBox>

实现代码: 

 1 package com.example.changebutton;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 import android.app.Activity;
 6 import android.app.AlertDialog;
 7 import android.os.Bundle;
 8 import android.view.View;
 9 import android.view.View.OnClickListener;
10 import android.widget.Button;
11 import android.widget.CheckBox;
12 import android.widget.LinearLayout;
13 
14 public class CheckBoxActivity extends Activity implements OnClickListener {
15 
16     private List<CheckBox> checkBoxs = new ArrayList<CheckBox>();
17     private Button checkBtn;
18 
19     @Override
20     protected void onCreate(Bundle savedInstanceState) {
21         super.onCreate(savedInstanceState);
22         chooseMethod(false);
23         checkBtn = (Button) findViewById(R.id.checkBtn);
24         checkBtn.setOnClickListener(this);
25     }
26 
27     @Override
28     public void onClick(View v) {
29         String s = "";
30         //循环cheackBoxs
31         for (CheckBox c : checkBoxs) {
32             if (c.isChecked()) {
33                 //如果选中就添加选中结果到msg中。
34                 s += c.getText() + "\n";
35             }
36         }
37         if ("".equals(s)) {
38             s = "您没有选中选项!";
39         }
40         //使用对话框弹出选中的信息
41         new AlertDialog.Builder(this).setMessage(s)
42                 .setPositiveButton("Exit", null).show();
43     }
44 
45     private void chooseMethod(boolean b) {
46         String[] checkboxText = new String[] { "You are student?",
47                 "Do you like Android?", "Do you have a girlfriend",
48                 "Do you like online shopping?" };
49         if (b) {
50             //使用本文中提到的第一种方式,通过Id动态加载
51             setContentView(R.layout.checkbox_layout);
52             //获取带填充的布局控件
53             LinearLayout linearLayout = (LinearLayout) this
54                     .findViewById(R.id.checkLayout);
55             //根据数组,循环添加内容
56             for (int i = 0; i < checkboxText.length; i++) {
57                 CheckBox checkbox = new CheckBox(this);
58                 checkBoxs.add(checkbox);
59                 checkBoxs.get(i).setText(checkboxText[i]);
60                 //把CheckBox加入到布局控件中
61                 linearLayout.addView(checkbox);
62             }            
63         } else {
64             //通过动态填充的方式,找到布局文件
65             LinearLayout linearLayout = (LinearLayout) getLayoutInflater()
66                     .inflate(R.layout.checkbox_layout, null);
67             for (int i = 0; i < checkboxText.length; i++) {
68                 //在通过动态填充的方式找到CheckBox的文件
69                 CheckBox checkbox = (CheckBox) getLayoutInflater().inflate(
70                         R.layout.cheackbox, null);
71                 checkBoxs.add(checkbox);
72                 checkBoxs.get(i).setText(checkboxText[i]);
73                 linearLayout.addView(checkbox);
74             }
75             //最后把这个布局文件加载显示
76             setContentView(linearLayout);            
77         }
78     }
79 }

实现效果

 

ToggleButton

ToggleButton,一个开关按钮,有两个状态,大抵的用法与上面两个控件一直,可以通过两个属性显示不同状态时,控件内显示文字的内容不同,属性如下:

  • android:textOff/setTextOff(CharSequence):设置关闭时显示内容。
  • android:textOn/setTextOn(CharSequence):设置打开时显示内容。

ToggleButton,这个控件有一个OnCheckedChangeListener()事件,当开关的状态切换的时候会被触发,其中需要传递一个OnCheckedChangeListener接口的实现内,当被切换时,触发其中的onCheckedChange()方法,可以在其中写需要实现的功能代码。

下面通过一个示例讲解一下ToggleButton的使用,使用一个toggleButton控件,控制一个LinearLayout的布局排列方式。

布局代码:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" >
 6 
 7     <ToggleButton
 8         android:id="@+id/togBtn"
 9         android:layout_width="wrap_content"
10         android:layout_height="wrap_content"
11         android:checked="true"
12         android:textOff="横向排列"
13         android:textOn="纵向排列" />
14 
15     <LinearLayout
16         android:id="@+id/OriLayout"
17         android:layout_width="match_parent"
18         android:layout_height="match_parent"
19         android:orientation="vertical" >
20 
21         <Button
22             android:layout_width="wrap_content"
23             android:layout_height="wrap_content"
24             android:text="btn1" />
25 
26         <Button
27             android:layout_width="wrap_content"
28             android:layout_height="wrap_content"
29             android:text="btn2" />
30 
31         <Button
32             android:layout_width="wrap_content"
33             android:layout_height="wrap_content"
34             android:text="btn3" />
35     </LinearLayout>
36 
37 </LinearLayout>

实现代码:

 1 package com.example.changebutton;
 2 
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.widget.CompoundButton;
 6 import android.widget.CompoundButton.OnCheckedChangeListener;
 7 import android.widget.LinearLayout;
 8 import android.widget.ToggleButton;
 9 
10 public class ToggleButtonActivity extends Activity {
11     private ToggleButton togBtn;
12     private LinearLayout linearLayout;
13 
14     @Override
15     protected void onCreate(Bundle savedInstanceState) {
16         // TODO Auto-generated method stub
17         super.onCreate(savedInstanceState);
18         setContentView(R.layout.toggle_layout);
19         togBtn = (ToggleButton) findViewById(R.id.togBtn);
20         linearLayout = (LinearLayout) this.findViewById(R.id.OriLayout);
21 
22         togBtn.setOnCheckedChangeListener(new OnCheckedChangeListener() {
23             @Override
24             public void onCheckedChanged(CompoundButton buttonView,
25                     boolean isChecked) {
26                 //通过判断是否选中,来设置LinearLayout的横向纵向排列
27                 if (isChecked) {
28                     linearLayout.setOrientation(1);
29                 } else {
30                     linearLayout.setOrientation(0);
31                 }
32             }
33         });
34     }
35 }

实现效果:

示例代码下载

总结

以上就讲解了一下CompoundButton抽象类下的三个实现控件类的使用,在Android-4.0之后,又新加入了一个控件Switch,对它的使用与之上介绍的三个控件类似,这里就不再详细讲解了。

请支持原创,尊重原创,转载请注明出处。谢谢。

0
1
分享到:
评论

相关推荐

    android 经典代码例子

    在Android开发领域,经典代码例子是开发者学习和提升技能的重要资源。这些例子涵盖了各种关键功能和组件的实现,有助于深入理解Android应用的工作原理。在这个压缩包中,我们可能找到了多个有关Android编程的示例...

    Android开发入门60个小案例+源代码

    在Android开发领域,初学者经常会面临许多挑战,如理解Android应用程序的基本架构、学习XML布局、掌握Java或Kotlin编程语言,以及如何与设备硬件交互等。"Android开发入门60个小案例+源代码"这个资源提供了丰富的...

    Android省市区三级联动滚轮选择——Cascade_Master

    该组件是基于开源库`Android-wheel`实现的,`Android-wheel`是一个适用于Android的滚轮选择器,它可以创建类似于iOS中PickerView的效果,让用户通过滚动来选取所需的数据。在省市区三级联动中,当用户在一级(省)...

    Android自定义日期选择器源码

    在Android开发中,系统默认的日期和时间选择器虽然实用,但往往无法满足所有场景的需求。因此,开发者经常需要自定义日期选择器来提供更符合应用风格或特定功能的交互体验。这篇内容将深入探讨如何在Android中创建一...

    Android通过webservice连接Sqlserver实例

    在Android开发中,有时我们需要与远程数据库进行交互,例如SQLServer。这个场景通常是通过Web服务,如WebService来实现。本文将详细介绍如何在Android应用中利用WebService接口连接到SQLServer数据库,实现数据的增...

    Android串口通信(Android Studio)

    在Android开发中,串口通信(Serial Port Communication)是一种重要的技术,它允许设备之间通过串行接口进行数据交换。在Android Studio环境下实现串口通信,开发者可以构建与硬件设备交互的应用,例如读取传感器...

    Android设置虚线、圆角、渐变

    在Android开发中,为UI元素添加虚线、圆角和渐变效果是常见的需求,可以提升应用的视觉吸引力。下面将详细讲解如何实现这些效果。 ### 一、虚线(Dashed Line) 在Android中,我们可以使用`Shape Drawable`来创建...

    Android组件设计思想

    Android应用开发的哲学是把一切都看作是组件。把应用程序组件化的好处是降低模块间的耦合性,同时提高模块的复用性。Android的组件设计思想与传统的组件设计思想最大的区别在于,前者不依赖于进程。也就是说,进程...

    新版Android开发教程.rar

    ----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...

    Android 完美实现图片圆角和圆形

    在Android开发中,有时我们需要对显示的图片进行特殊处理,比如让图片呈现圆角或完全圆形。本知识点将深入探讨如何在Android应用中完美实现图片的圆角和圆形效果。 首先,我们来看如何实现图片的圆角效果。Android...

    Android.bp文件说明.pdf

    Android新编译规则Android.bp文件语法规则详细介绍,条件编译的配置案例。 Android.bp 文件首先是 Android 系统的一种编译配置文件,是用来代替原来的 Android.mk 文件的。在 Android7.0 以前,Android 都是使用 ...

    JS调用Android方法,向Android方法传递json数据

    在现代的移动应用开发中,JavaScript与原生平台之间的交互变得越来越常见,特别是在使用Android的WebView组件时。本文将深入探讨如何使用JavaScript调用Android的方法,并传递JSON数据,以实现两者之间的高效通信。 ...

    Android扫雷游戏(基于Android Studio)

    【Android扫雷游戏开发详解】 在移动开发领域,Android Studio是Google推出的官方集成开发环境(IDE),用于构建Android应用程序。本项目"Android扫雷游戏"就是利用Android Studio进行开发的一个实例,旨在帮助初学...

    android应用开发范例精解

    第2篇为应用开发篇,通过实例介绍了Android UI布局、Android人机界面、手机硬件设备的使用、Android本地存储系统、Android中的数据库、多线程设计、Android传感器、Android游戏开发基础、Android与Internet,以及...

    android 仿微信语音聊天demo

    【Android 微信语音聊天Demo】是一个典型的移动应用开发示例,主要展示了如何在Android平台上构建类似微信的语音聊天功能。这个Demo包含了按钮状态切换、语音录制、本地存储、回放和加载等一系列关键操作,是Android...

    Android SDK离线包合集(Android 4.0-5.0)

    Android SDK离线包合集(Android 4.0-5.0)。不用去Google下载,直接国内下载离线包,各版本文件独立,任意下载。手机流量上传了一部分,好心疼。如不能下载,请告诉我更新地址。 附上简单教程。 这是Android开发所...

    Android 图片浏览全屏缩放

    在Android开发中,实现图片浏览的全屏缩放效果是一项常见的需求,特别是在社交应用中,如QQ好友动态和微信朋友圈。这种功能不仅需要提供良好的用户体验,还需要考虑性能和内存优化,因为图片通常较大,处理不当可能...

    Android小项目集合100多个

    1. **Android SDK**:Android软件开发工具包(SDK)是开发Android应用的基础,包含了开发、调试和发布应用所需的所有工具,如Android Studio IDE、Java Development Kit(JDK)、模拟器以及各种版本的Android平台库...

Global site tag (gtag.js) - Google Analytics