我们在手机上经常看到一堆选项,但是我们只能选择一个,那么在Android中,这个控件就叫做RadioButton,也就是单选按钮的意思,他们之所以能够达到只能选择一个的效果,是因为有一个RadioGroup这样一个组件。

这次,我们就来详细的解说一下RadioButton和RadioGroup这两个控件的关系和区别,以及如何去使它们默契的搭配在一起~

要实现RadioButton由两部分组成,也就是RadioButtonRadioGroup配合使用,其中RdioGroup是单选组合框,可以容纳多个RadioButton的一个容器。在没有RadioGroup的情况下,RadioButton可以全部被选中;当多个RadioButton被RadioGroup包含的情况下,RadioButton只可以选择一个,从而达到了单选的目的。并用setOnCheckChangeLinstener()来对单选按钮进行监听。

RadioGroup的相关属性:

  1.RadioGroup.getCheckedRadioButtonId();

    该方法可以获取选中的按钮

  2.RadioGroup.clearCheck();

    该方法可以清除选中状态

  3.setOnCheckedChangeLintener(RadioGroup.OnCheckedChangeListener listener);

    当一个单选按钮组中的单选按钮选中状态发生改变的时候调用的回调方法

  4.RadioGroup.check(int id);

    该方法可以通过传入ID来设置该选项为选中状态

  5.addView(View child,int index, ViewGroup.LayoutParams params);

    使用指定布局参数添加一个字视图(其中child是要添加的子视图,index是将要添加子视图的位置,params 所要添加的子视图的布局参数)

  6.RadioButton.getText();

    获取单选框的值

  此外,RadioButton的checked属性设置为true,代码里调用RadioButton的check(id)方法,不会触发onCheckedChanged事件

然后,我们来看一下RadioButtonRadioGroup关系

    1.RadioButton表示单个原型单选框,而RadioGroup是可以容纳多个RadioButton的容器

    2.每个RadioGroup中的RadioButton同时只能有一个被选中

    3.不同的RadioGroup中的RadioButton互不相干,即如果组A中有一个选中了,那么组B中依然可以有一个被选中。

    4.在大部分场合下,一个RadioGroup中至少有两个RadioButton

    5.在大部分场合下,一个RadioGroup中的RadioButton默认会有一个被选中,并建议您将它放在RadioGroup的起始位置

我们继续来看一下RadioButtonCheckBox区别(是与CheckBox哦~):

    1.单个RadioButton选中之后,通过点击无法变为未选中

     单个CheckBox在选中后,通过点击可以变为未选中

    2.一组RadioButton,只能同时选中一个

       一组CheckBox,能同时选中多个

    3.RadioButton在大部分UI框架中默认都以圆形表示

     CheckBox在大部分UI框架中默认都以矩形表示

然后,我们来做一个小案例,来进一步的解释说明RadioButton和RadioGroup

二话不说,我们先上图

今天哈,我们就用RadioButton和RadioGroup来实现我们上面的这个小案例。

  首先,我们来分析一下,我们想要实现这个案例都需要准备写什么吧

我们根据上面的图,我们能看出来,我们需要图片~然而需要几张呢?这里事需要6张的哦!我们看起来是三张图片,但是当我们点击的时候,我们会发现图片变色了, 这就是另一张图片了。所以,我们需要准备6张图片。

这是资源。

  接下来,我们来分析一下,我们都需要创建什么配置文件

不用想,我们首先必须要有一个主界面的布局文件,并且放上三个RadioButton,用一个RadioGroup把这三个RadioButton包裹起来,并设置相应属性

然后,我们还需要在drawable目录下创建一个改变字体颜色的配置文件,和三个改变图片的配置文件

  然后,我们再来分析一下,在Activity中,我们应该如何去做

首先,我们需要获取到这个RadioGroup,然后为其设置点击事件,在点击事件中,我们实现点击按钮弹出一个吐司

好了,我们的分析就暂时到这里,接下来,我们根据我们的分析来做具体的实现

第一步、我们先来创建主界面的布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="application.smile.myapplicationdemo.MainActivity">

    <RadioGroup
        android:id="@+id/rg"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/colorBackground"
        android:orientation="horizontal">

        <RadioButton
            android:id="@+id/radioButton_xiaoxi"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:button="@null"
            android:drawableTop="@drawable/bottom_icon_iamge_selector_xiaoxi"
            android:gravity="center"
            android:text="消息"
            android:textColor="@drawable/bottom_icon_text_selector" />

        <RadioButton
            android:id="@+id/radioButton_lianxiren"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:button="@null"
            android:drawableTop="@drawable/buttom_icon_image_selector_lianxiren"
            android:gravity="center"
            android:text="联系人"
            android:textColor="@drawable/bottom_icon_text_selector" />

        <RadioButton
            android:id="@+id/radioButton_dongtai"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:button="@null"
            android:drawableTop="@drawable/bottom_icon_image_selector_dongtai"
            android:gravity="center"
            android:text="动态"
            android:textColor="@drawable/bottom_icon_text_selector" />
    </RadioGroup>
</LinearLayout>

在这里,我们解释一下其中上面没有介绍到的属性

  android:drawableTop 属性是用来将指定的图片显示到RadioButton的顶部,为了方便我们下面放文字

第二步、我们来看改变字体颜色的配置文件:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="false" android:color="@color/colorWhite"></item>  这个是白色
    <item android:state_checked="true" android:color="@color/colorRed"></item>    这个是橘黄色
</selector>

第三步、我们来看改变那三张图片的配置文件:

改变“消息”:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@mipmap/xiaoxi_unchecked" android:state_checked="false"></item>
    <item android:drawable="@mipmap/xiaoxi_selected" android:state_checked="true"></item>
</selector>

改变“联系人”:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="false" android:drawable="@mipmap/lianxiren_unchecked"></item>
    <item android:state_checked="true" android:drawable="@mipmap/lianxiren_selected"></item>
</selector>

改变“动态”:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="false" android:drawable="@mipmap/dongtai_unchecked"></item>
    <item android:state_checked="true" android:drawable="@mipmap/dongtai_selected"></item>
</selector>

我们来详细的看一下这些文件中的属性

  其中android:state_checked 属性是设置状态的,如果是选中状态,就为true,否则为false。后面对应的 android:drawable 属性就是对应的图片

第四步、我们来看Activity中的具体实现:

public class MainActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initView() {
            //通过findViewById()来找到我们需要的RadioGroup
        RadioGroup radioGroup = (RadioGroup) findViewById(R.id.rg);
            //设置状态改变的事件
        radioGroup.setOnCheckedChangeListener(this);
    }

    /**
     * 重写的状态改变的事件的方法
     * @param group 单选组合框
     * @param checkedId 其中的每个RadioButton的Id
     */
    @Override
    public void onCheckedChanged(RadioGroup group, int checkedId) {
            //根据不同ID 弹出不同的吐司
        switch (group.getCheckedRadioButtonId()){
            case  R.id.radioButton_xiaoxi:
                Toast.makeText(this, "你点击了“消息”按钮", Toast.LENGTH_SHORT).show();
                break;
            case  R.id.radioButton_lianxiren:
                Toast.makeText(this, "你点击了“联系人”按钮", Toast.LENGTH_SHORT).show();
                break;
            case  R.id.radioButton_dongtai:
                Toast.makeText(this, "你点击了“动态”按钮", Toast.LENGTH_SHORT).show();
                break;
        }
    }
}

根据我们的思路,我们实现了这样的一个小案例,我们来测试一下吧。

这样,我们就完美的实现了我们的小案例。

让程序写入生命,将代码融入灵魂

                    -------smile、zj

Android基本控件之RadioGroup的更多相关文章

  1. Android 基本控件相关知识整理

    Android应用开发的一项重要内容就是界面开发.对于用户来说,不管APP包含的逻辑多么复杂,功能多么强大,如果没有提供友好的图形交互界面,将很难吸引最终用户.作为一个程序员如何才能开发出友好的图形界 ...

  2. 一个Demo让你掌握Android所有控件

    原文:一个Demo让你掌握Android所有控件 本文是转载收藏,侵删,出处:"安卓巴士"      下面给出实现各个组件的源代码: 1.下拉框实现--Spinner packag ...

  3. android 基础控件(EditView、SeekBar等)的属性及使用方法

        android提供了大量的UI控件,本文将介绍TextView.ImageView.Button.EditView.ProgressBar.SeekBar.ScrollView.WebView ...

  4. Android基本控件之Menus

    在我们的手机中有很多样式的菜单,比如:我们的短信界面,每条短信,我们长按都会出现一个菜单,还有很多的种类.那么现在,我们就来详细的讨论一下安卓中的菜单 Android的控件中就有这么一个,叫做Menu ...

  5. Android:控件布局(相对布局)RelativeLayout

    RelativeLayout是相对布局控件:以控件之间相对位置或相对父容器位置进行排列. 相对布局常用属性: 子类控件相对子类控件:值是另外一个控件的id android:layout_above-- ...

  6. Android:控件布局(线性布局)LinearLayout

    LinearLayout是线性布局控件:要么横向排布,要么竖向排布 决定性属性:必须有的! android:orientation:vertical (垂直方向) .horizontal(水平方向) ...

  7. 矩阵, 矩阵 , Android基础控件之ImageView

    天下文章大家抄,以下所有内容,有来自copy,有来自查询,亦有自己的总结(目的是总结出自己的东西),所以说原创,不合适,说是转载也不恰当,所以我称之为笔记,可惜没有此分类选项,姑且不要脸一点,选择为原 ...

  8. Android给控件添加触摸回调

    Android给控件添加触摸回调 脑补一个场景,一个页面点击某个按钮会弹出PopupWindow,然后点击PopupWindow以外的任意位置关闭 效果图 实现方法 可以在布局的最外层容器监听触摸事件 ...

  9. Github上star数超1000的Android列表控件

    Android开发中,列表估计是最最常使用到的控件之一了.列表相关的交互如下拉刷新,上拉更多,滑动菜单,拖动排序,滑动菜单,sticky header分组,FAB等等都是十分常见的体验.Github中 ...

随机推荐

  1. ZTE and TP-Link RomPager - DoS Exploit

    #!/usr/bin/env python # -*- coding: utf-8 -*- # Exploit Title: ZTE and TP-Link RomPager DoS Exploit ...

  2. Oracle出现字符集问题处理方法

    1.  Cmd进去DOS 2.  再输入dbca(database  create) 3.  弹出的界面,直接下一步,选择删除数据库 4.  成功删除后,回到一第一界面,选择创建数据库,下一步. 5. ...

  3. jQuery zTree v3.5 实例3 异步树

    最终效果: 点击非叶子节点时,向后台发送请求,获取下级菜单 前台代码如下: <%@ page language="java" contentType="text/h ...

  4. BZOJ 1509: [NOI2003]逃学的小孩

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1509 直接求出树的直径,枚举每个点更新一遍答案. #include<cstring> ...

  5. 神奇的ASCⅡ码图

    神奇的ASCⅡ码图 可能在网上也常见了asc2码图,但你知道是怎么做出来的吗?(总不可能是人一个一个字码进去的吧,当然,不排除有这种神人的可能

  6. JS 防抖函数和节流函数

    文章转载自:木上有水 什么是防抖?什么是节流? 工作中我们经常会用一些方法监听某些事件的完成,比如scroll.resize.keyup等. 常规事件触发的时候,比如scroll,会在短时间内触发多次 ...

  7. hass连接设备

    hass如何自动发现mqtt设备 https://www.hachina.io/docs/7230.html 玩家自定义 https://www.hachina.io/6572.html

  8. Javascript构造函数的继承

    仅供学习参考,原文链接:http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_inheritance.html 今天要介绍 ...

  9. 关于ftp上传changeWorkingDirectory()方法的路径切换问题

    在上传时 FTPClient提供了upload方法,对于upload(file,path)的第二个参数path ,上传到哪里的这个路径, ftp是利用changeWorkingDirectory()方 ...

  10. php和NodeJs共存的开发环境

    1 折腾 php nodejs 到一起 nodejs当然很火,就像着火了一样,但是必须承认要搭建一个前端的demo开发环境还是PHP靠谱, windows下可以非常的集成套件,比如http://www ...