单项选择RadioButton和多项选择CheckBox的使用
前言:
在上一章我写了关于安卓UI控件之Button,这一章就来讲解下它的子类RadioButton和CheckBox。
在Android中,可以通过RadioButton和RadioGroup的组合来实现单项选择的效果。而多项选择则是通过CheckBox来实现的。
1、单选选择RadioButton
我们知道,一个单项选择是由两部分组成的,分别是前面的选择按钮和后面的“答案”。
选择按钮可以通过RadioButton来实现,而“答案”则可以通过RadioGroup来实现。
具体的实现步骤如下:
首先,在布局文件中定义一个TextView控件,用来显示问题。
然后,再在布局文件中定义一个RadioGroup控件,用来显示答案。
最后,再在RadioGroup控件中定义四个(根据需求而定)RadioButton控件,并将“答案”分别赋给每个选项。
如下是单项选择的XML:
那么如何来确定用户的选择是否正确,并给出相应的提示信息呢?
要确定用户的选择是否正确,需要知道用户选择的是选项中的哪一项,
这可以通过为RadioGroup设置事件监听器setOnCheckedChangeListener来实现。
通过该事件监听器便可以判断出用户点击的是哪一个RadioButton了。然后,再使用Toast来显示相应的提示信息即可。
用上述方案实现单项选择demo的java源代码如下:
package com.dsl.ui_application_07;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;
/**
* 功能:安卓控件之单项选择按钮
*
* 作者:单胜凌
* 时间:2016.12.14
*/
public class MainActivity extends Activity {
TextView mTV; //用于显示问题
RadioGroup mRG; //用于显示答案
RadioButton mRB1; //用于显示选项
RadioButton mRB2;
RadioButton mRB3;
RadioButton mRB4;
Button mBT; //跳转按钮
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //加载布局文件
//加载控件绑定
mTV = (TextView)findViewById(R.id.textview);
mRG = (RadioGroup)findViewById(R.id.radiogroup);
mRB1= (RadioButton)findViewById(R.id.radiobutton1);
mRB2= (RadioButton)findViewById(R.id.radiobutton2);
mRB3= (RadioButton)findViewById(R.id.radiobutton3);
mRB4= (RadioButton)findViewById(R.id.radiobutton4);
mBT = (Button)findViewById(R.id.button1);
//设置监听器
mRG.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
public void onCheckedChanged(RadioGroup group, int checkedId) {
if (checkedId == mRB3.getId()) {
MyToast("正确答案:"+mRB3.getText()+",恭喜你,回答正确");
} else {
MyToast("回答错误!");
}
}
});
mBT.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//跳转到下一项测试页
Intent intent=new Intent();
intent.setClass(MainActivity.this, Activity_tow.class);
startActivity(intent);
finish();
}
});
}
private void MyToast(String str)
{
Toast mtoast = Toast.makeText(MainActivity.this,str,Toast.LENGTH_SHORT);
mtoast.setGravity(Gravity.TOP,0,400);
mtoast.show();
}
}
2、多项选择按钮
多项选择与单项选择最重要的区别就是多项选择可以让用户选择一个以上的选项。
在Android中,多项选择是通过CheckBox来实现的,为了确定用户是否选择了某一项,则需要对每一个选项进行事件监听。
多项选择的实现方法和单项选择的实现方法大致相同。
首先,在布局文件中定义一个TextView控件,用来显示问题。
然后,再在布局文件中定义四个(根据需求而定)CheckBox控件,分别用来显示每一个选项。
最后,在布局文件中定义一个Button控件,用于提交用户所选的选项(这个可以没有)。
如下是多项选择demo的xml布局文件:
为此,我们需要为每一个CheckBox多项选择选项都设置一个事件监听器setOnCheckedChangeListener,
并通过mCheckBox.isChecked()方法来判断该选项是否被选中(true表示被选中,false表示未选中)。
此外,我们还可以通过一个全局变量checkedcount来统计当前有几个选项被选中,实现方法也很简单,
当mCheckBox.isChecked()为true时令checkedcount++;当mCheckBox.isChecked()为false时令checkedcount--就可以了。
最后,我们再为“提交”按钮设置一个监听器setOnClickListener,当用户点击“提交”时,显示一条总共选择了几项的提示信息。
多项选择demo的java源码如下:
package com.dsl.ui_application_07;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.Toast;
/**
* 功能:安卓多选按钮Demo
*
* 作者:单胜凌
* 时间:2016/12/14.
*/
public class Activity_tow extends Activity {
CheckBox mCB1; //用于显示选项
CheckBox mCB2;
CheckBox mCB3;
CheckBox mCB4;
Button mBT2; //提交文件按钮
Button mBT3; //跳转到下一项按钮
int num=0; //用于统计被选中的个数
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tow); //加载布局文件
initUI(); //初始化控件
//绑定监听器
mCB1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(mCB1.isChecked())
{
num++;
MyToast("你选择了:"+mCB1.getText());
}
else{
num--;
}
}
});
mCB2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(mCB2.isChecked()){
num++;
MyToast("你选择了:"+mCB2.getText());
}
else {
num--;
}
}
});
mCB3.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(mCB3.isChecked())
{
num++;
MyToast("你选择了:"+mCB3.getText());
}
else {
num--;
}
}
});
mCB4.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(mCB4.isChecked())
{
num++;
MyToast("你选择了:"+mCB4.getText());
}
else
{
num--;
}
}
});
mBT2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MyToast("谢谢您的参与,您一共选择了"+num+"项!");
}
});
mBT3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent();
intent.setClass(Activity_tow.this, Activity_three.class);
startActivity(intent);
finish();
}
});
}
private void initUI()
{
mCB1 = (CheckBox)findViewById(R.id.checkbox1);
mCB2 = (CheckBox)findViewById(R.id.checkbox2);
mCB3 = (CheckBox)findViewById(R.id.checkbox3);
mCB4 = (CheckBox)findViewById(R.id.checkbox4);
mBT2 = (Button)findViewById(R.id.button2);
mBT3 = (Button)findViewById(R.id.button3);
}
private void MyToast(String str)
{
Toast mtoast = Toast.makeText(Activity_tow.this,str,Toast.LENGTH_SHORT);
mtoast.setGravity(Gravity.TOP,0,400);
mtoast.show();
}
}
3、定义自己的RadioButton单项选择样式
Android提供的单项选择RadioButton式样比较单一,如何来定制自己想要的单项选择RadioButton式样呢?下面给出一个简单的实现案例。
我们知道,Android提供的单项选择RadioButton式样,有三点最基本的特性:
第一,RadioButton有两种状态,一种是未选中下的置灰状态,另一种是选中下的高亮状态,且两种状态互斥。
第二,RadioButton间存在互斥性,即仅能选中其中的某一个选项。
第三,能够判断出当前用户选择的是哪一个RadioButton选项。
所以,我们自己定制的单项选择RadioButton式样至少也应该具备以上的三点特性。
3.1特性一的实现
特性一的实现并不复杂,我们可以使用两张不同的图片来分别表示RadioButton的两种状态(选中和未选中),
而选中和未选中的状态则可以通过android:state_checked属性来设置。
具体可以通过在工程的res/drawable目录下新建一个radiostyle.xml文件来实现,
radiostyle.xml文件的源代码如下,其中presence_offline是选中状态下要显示的图片,presence_online是未选中状态下要显示的图片。
3.2特性二的实现
要实现RadioButton选项间的互斥性,可以通过mRadioButton.setChecked()方法来实现,当某一选项为true时,将其余选项置为false即可。
3.3特性三的实现
要判断用户选中的是哪一个选项,可以通过为每一个RadioButton按钮设置一个setOnClickListener监听器来实现。
3.4实例效果
在本实例中,定制了一个自己的单项选择RadioButton式样,并且实现RadioButton式样的上述三点最基本的特性,
达到了和1.单项选择RadioButton中的所举例子同样的运行效果。运行效果如下所示。
关于Android单项选择和多项选择按钮的讲解到此结束!!!
源码地址如下:
https://github.com/DSLAndroid/UI_Application_07
本资源来自单胜凌!!!
Android靠自学!!!
祝各位IT人士早日取得成功!!!