Android中RadioButton和Checkbox的使用

今天要给产品加一个类似于调查问卷的页面,用到单选框,百度了一些觉得很零碎也不详细,觉得自己写一篇学习笔记方便自己也方便别人学习。
RadioButton
RadioButton是单选框,比如男女,年龄阶段的单项选择等。一般会有一组Button,放在一个RadioGroup里面。这样他自己就会是单选框。但是很多人也觉得原生的按钮太丑了,所以我就自定义了一下。
RadioButton和RadioGroup的关系:
1、RadioButton表示单个圆形单选框,而RadioGroup是可以容纳多个RadioButton的容器
2、每个RadioGroup中的RadioButton同时只能有一个被选中
3、不同的RadioGroup中的RadioButton互不相干,即如果组A中有一个选中了,组B中依然可以有一个被选中
4、大部分场合下,一个RadioGroup中至少有2个RadioButton
5、大部分场合下,一个RadioGroup中的RadioButton默认会有一个被选中,并建议您将它放在RadioGroup中的起始位置

先上一张做好的效果图吧,再看看怎么实现的:

选好两张图片,分别为点击状态和未点击状态,在res/drawable中定义编写如下样式:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/login_squestion" android:state_checked="true"/>
    <item android:drawable="@drawable/login_uquestion" android:state_checked="false"/>
</selector>
在XML布局中,添加组和控件:

<RadioGroup
        android:id="@+id/question_rdGroup1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:minHeight="40dp"
        android:orientation="horizontal" >

        <RadioButton
            style="@style/radioBtn"
            android:text="@string/loginques_best" />

        <RadioButton
            style="@style/radioBtn"
            android:text="@string/loginques_better" />

        <RadioButton
            style="@style/radioBtn"
            android:text="@string/loginques_commonly" />

        <RadioButton
            style="@style/radioBtn"
            android:text="@string/loginques_worse" />

        <RadioButton
            style="@style/radioBtn"
            android:text="@string/loginques_worst" />
    </RadioGroup>
由于我的控件太多,相同的属性就全部合并到style里面了,不然东西太多,修改起来太麻烦:

 <style name="radioBtn">
        <item name="android:layout_width">0dp</item>
        <item name="android:layout_weight">1</item>
        <item name="android:layout_height">wrap_content</item>
        <item name="android:button">@null</item>
        <item name="android:drawableLeft">@drawable/radio_loginquest_bt</item>
        <item name="android:drawablePadding">5dp</item>
        <item name="android:textSize">14sp</item>
        <item name="android:layout_marginLeft">5dp</item>
    </style>
        如果想实现整个RadioButton控件,点击填充变色的效果,则许修改android:background="@drawable/radio" 这一样式 。android:button="@null" 去除RadioButton前面的圆点。
       而我这里算是把原点改成方块对勾的选择方式,所以就有设置android:drawableLeft=“@drawable/radio_loginquest_bt”,其中的@drawable/radio_loginquest_bt 即为我们一开始在drawable下编写的图片样式。默认该选项选上的属性是android:checked="true"。
       有的朋友想设置选框的大小尺寸,可以试一下下面的方法设置一下边界:
drawables = getCompoundDrawables();
drawables[1].setBounds();
setCompoundDrawables(drawables[0],drawables[1],drawables[2].drawables[3]);
       选框太多,我没用亲自试,大家可以试一下告诉我行不行或者具体写法,我直接把图片的尺寸改小了一下就好了。

    Java中单选框的监听事件如下:

rdGroup1.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
	@Override
	public void onCheckedChanged(RadioGroup group, int checkedId) {
	     RadioButton radioButton = (RadioButton) group.findViewById(checkedId);
	     String question1 = radioButton.getText().toString();
		}
	});
       question1中可以获得这组RadioButton中选中Button的文字,根据文字进行一些逻辑判断即可。也有朋友是下面的这种写法,大体差不多,看个人的想法和习惯就好。
 //对控件对象进行声明 
    private RadioGroup genderGroup=null; 
    private RadioButton femaleRadioButton=null; 
    private RadioButton maleRadioButton=null; 
    private EditText editText1=null; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
        //通过控件的ID来得到代表控件的对象 
        genderGroup=(RadioGroup)findViewById(R.id.genderGroup); 
        femaleRadioButton=(RadioButton)findViewById(R.id.femaleButton); 
        maleRadioButton=(RadioButton)findViewById(R.id.maleButton); 
        editText1=(EditText)findViewById(R.id.editText1); 
        //给RadioGroup设置事件监听 
        genderGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 
            @Override 
            public void onCheckedChanged(RadioGroup group, int checkedId) { 
                // TODO Auto-generated method stub 
                if(checkedId==femaleRadioButton.getId()){ 
                    editText1.setText("女性"); 
                }else if(checkedId==maleRadioButton.getId()){ 
                    editText1.setText("男性"); 
                } 
            } 
        }); 
    } 


Checkbox

       Checkbox 是Android控件中拥有着0和1这种特性的魔力控件。一般用来实现多选。

       先来讲讲Checkbox的基本使用.在XML中定义。

<?xml version="1.0" encoding="utf-8"?>
<CheckBox xmlns:android="http://schemas.android.com/apk/res/android"
	android:id="@+id/cbx"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:checked="false" />
       在Activity中使用:
CheckBox cbx = (CheckBox) findViewById(R.id.cbx);
cbx.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    	//do something
    }
});
       要注意的是,CheckBox本身是一个视图,是展示给用户看的,因此我们要用数据来控制它的展示.所以,我们的CheckBox在Activity中要这么写:
boolean isChecked= false;
CheckBox cbx = (CheckBox) findViewById(R.id.cbx);
cbx.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
  	@Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if(isChecked){
           	//do something
        }else{
            //do something else
        }
    }
});
cbx.setChecked(isChecked);
       这样,我们改变数据的时候,视图的状态就会跟着数据来做改变了.注意,监听器一定要这setChecked之前设置,这样才能体现出来数据来控制视图的展示。


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值