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

  Android RadioGroup 及资源文件 & selector

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

  Android RadioGroup 及资源文件 & selector

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

  Android RadioGroup 及资源文件 & selector

<?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>

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

<?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>

效果如图:

  Android RadioGroup 及资源文件 & selector

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

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

  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

Android RadioGroup 及资源文件 & selectorAndroid RadioGroup 及资源文件 & selector

<?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

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

  

上一篇:Android 6.0 运行时权限处理完全解析 (摘抄)


下一篇:强制python repr以单引号或者双引号格式返回字符串表达式