zoukankan      html  css  js  c++  java
  • 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

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

      

  • 相关阅读:
    [翻译] .NET 官宣跨平台 UI 框架 MAUI
    手写一个简易的多周期 MIPS CPU
    介绍一个基于 .NET 的船新 PHP SDK + Runtime: PeachPie
    C# 9 新特性:代码生成器、编译时反射
    .NET 5 中的正则引擎性能改进(翻译)
    你所不知道的 C# 中的细节
    拿 C# 搞函数式编程
    从未来看 C#
    直接使用汇编编写 .NET Standard 库
    用 F# 手写 TypeScript 转 C# 类型绑定生成器
  • 原文地址:https://www.cnblogs.com/hxb2016/p/6097004.html
Copyright © 2011-2022 走看看