Android RadioGroup 及资源文件 & selector

RadioGroup :单选组         RadioButton :单选按钮

RadioButton和CheckBox的区别:

  • 1、单个RadioButton在选中后,通过点击无法变为未选中
    • 单个CheckBox在选中后,通过点击可以变为未选中
  • 一组RadioButton,只能同时选中一个
    • 一组CheckBox,能同时选中多个
  • RadioButton在大部分UI框架中默认都以圆形表示
    • CheckBox在大部分UI框架中默认都以矩形表示

RadioButton和RadioGroup的关系:

  • RadioButton表示单个圆形单选框,而RadioGroup是可以容纳多个RadioButton的容器
  • 每个RadioGroup中的RadioButton同时只能有一个被选中
  • 不同的RadioGroup中的RadioButton互不相干,即如果组A中有一个选中了,组B中依然可以有一个被选中
  • 大部分场合下,一个RadioGroup中至少有2个RadioButton
  • 大部分场合下,一个RadioGroup中的RadioButton默认会有一个被选中,并建议您将它放在RadioGroup中的起始位置

在layout.xml图像界面中拖出一个RadioGroup(默认是纵向),会产生三个RadioButton

  

当我们把RadioGroup中的android:orientation 设为水平 horizontal

  

参照我们手机的App,是不是很多地方都是这样呢?那么现在我们去掉按钮

  

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <RadioGroup
        android:id="@+id/radioGroup1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal" >

        <RadioButton
            android:id="@+id/radio0"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:button="@null"
            android:checked="true"
            android:text="1" />

        <RadioButton
            android:id="@+id/radio1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:button="@null"
            android:text="2" />

        <RadioButton
            android:id="@+id/radio2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:button="@null"
            android:text="3" />
    </RadioGroup>

</LinearLayout>
View Code

=====================================================================================

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

    <RadioGroup
        android:id="@+id/radioGroup1"
        android:layout_width="match_parent"
        android:layout_height="60dp" 
        android:orientation="horizontal"
        android:background="@drawable/group_buton_nomal"
        android:gravity="center">

        <RadioButton
            android:id="@+id/radio0"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checked="true"
            android:text="@string/weixin" 
               style="@style/radioStyle"
               android:drawableTop="@drawable/tab_weixin"/>

        <RadioButton
            android:id="@+id/radio1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/addressList" 
               style="@style/radioStyle"
               android:drawableTop="@drawable/tab_address"/>

        <RadioButton
            android:id="@+id/radio2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/find" 
               style="@style/radioStyle"
               android:drawableTop="@drawable/tab_find"/>
        
         <RadioButton
            android:id="@+id/radio3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/set"
               style="@style/radioStyle" 
               android:drawableTop="@drawable/tab_set"/>
    </RadioGroup>

</LinearLayout>

效果如图:

  

那么,很多人就不明白了。为什么我复制下来,一模一样敲出来怎么没有这效果,还报错。

首先,我们先来看一下里面引用的资源:

  1. android:id ="@+id/radioGroup1"  

    • @+id 与@id 的区别

       -->@+id 自动把起的ID名字加入到配置文件中,在业务逻辑中可以直接在R.id中找到,相当于创建。

       -->@id在Value目录下写一个ids.xml来对每个id进行声明,相当与引用。

  2. android:background ="@drawable/group_buton_nomal"

    android:drawableTop="@drawable/tab_weixin"

    • 之前我们也讲过,在rec下的含有 drawable 的都是图片资源,用于像素不同引用。

       -->单张图片引用,如背景图片。直接把图片复制进去。

       -->多张图片引用,如图片切换。声明一个selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    
    <item android:state_checked="true"           --------选中时,图片
        android:drawable="@drawable/tabbar_contacts_hl"></item>

    <item android:state_checked="false"          --------离开时,图片
        android:drawable="@drawable/tabbar_contacts"></item>

</selector>

  selector   主要是用来改变ListView和Button控件的默认背景。

    • android:state_selected  --------> 选中
    • android:state_focused   --------> 获得焦点
    • android:state_pressed --------> 点击
    • android:state_enabled   --------> 设置是否响应事件,指所有事件

  3.android:text="@string/weixin"

    • 在res下有一个values文件夹,里面有一个strings.xml

      -->字符串的资源文件,供layout 布局调用。很多人会直接:text="1" ,但会有警告,就是没引用资源。

  4.style="@style/radioStyle"

    • 样式资源定义了用户界面(UI)的格式和外观。样式能被应用到单独的View,也能应用带整个App

      -->以 name(名称)  ---   属性  键值对的方式存放在 res -->values -->styles.xml下  

      -->当然,style一般作为一种简化代码、重复利用、作为引用 ,相当与 打包

      如上面的  在每个Button下都要设置 去掉按钮、比重为1、居中显示、文本选中变颜色,那么我们可以在values.xml中声明一个style

      

        

    <style name="radioStyle">
        <item name="android:button">@null</item>
        <item name="android:layout_weight">1</item>
        <item name="android:gravity">center</item>
        <item ame="android:textColor">
            @drawable/text_color</item>
    </style>            

  在layout中就只要引用就可以了:style="@style/radioStyle"  (注意对应name)

  想必,知道这些,不用复制也可以自己写出来了。

  下一篇:Android 微信UI、点击 http://www.cnblogs.com/hxb2016/p/6097870.html

  谢谢大家的关注。万里不惜死,一朝得成功

  

原文地址:https://www.cnblogs.com/hxb2016/p/6097004.html