• 从html radio到android RadioButton


    Radio是表单元素,特性是:

    • 提供ui组件给用户从多个选项中选中其中一个,选中一个其他的都会被取消掉
    • 开发人员不需要手动绑定点击事件以及不需要手动取消用户没有选中的其他选项的【选中状态】

    html radio

    Html代码如下,通过同样的name来划分为同一组radio,value就是各自组建所代表的值

    1. <input type="radio" id="html" name="fav_language" value="HTML">
    2. <input type="radio" id="css" name="fav_language" value="CSS">

    获取选中的值

    1. //步骤一,得到所有的标签
    2. //步骤二,便利所有标签
    3. for (var i = 0; i < radios.length; i++) {
    4. //步骤三,获取选中的标签
    5.              if (radios[i].checked == true) {
    6.                      value = radios[i].value;
    7.              }
    8. }
    9. //打印选中的值
    10. console.log("value", value)

    html模拟

    如果不用radio呢?用div模拟呢?

    那会多好多个步骤

    html代码

    1. <div class=“radio”>html</div>
    2. <div class=“radio”>css</div>


    javascript

    1. //步骤1,获取所有的标签
    2. var radios=document.querySelectorAll(“.radio”);
    3. //取消
    4. function cancelSelect(i){
    5. radios[I].classList.remove(“select”);
    6. }
    7. //步骤二,便利所有标签
    8. for(let I=0;i<radios.length;i++){
    9. //步骤3,手动添加点击事件
    10. radios[I]. addEventListener(“click”,function(){
    11.            //步骤四 移除所有的选中class
    12.               cancelSelect(i);
    13. //步骤五,手动实现选中
    14. this.classList.add(“select”);
    15.         })
    16. }
    17. //步骤6,获取选中的标签的值
    18. var value=document.querySelectorAll(“.radio.select”).innerHtml



    模拟会比radio组建多三个步骤

    • 添加点击事件,
    • 移除选中效果
    • 实现选中效果

    样式

    还有一个css的代码,不管radio还是div模拟,如果为了好看都有必要添加个自定义的样式,下面以div模拟的样式为例

    1. .radio{
    2. background:grey;
    3. }
    4. .radio.select{
    5. background:red;
    6. }

    Html的内容到此为止,上做了这么多铺垫,其实都是为了更好的讲述android的TextView和RadioGroup&& RadioButton,android上实现与web的思路基本类同,不过实现的方式不一样

    TextView模拟RadioButton

    布局标签

    1. <TextView
    2. …省略部分
    3.             android:background="@drawable/tab_menu_bg"
    4.             android:drawableTop="@drawable/tab_menu_channel"
    5.             android:text=“文字” />
    6. <TextView
    7. …省略部分
    8.             android:background="@drawable/tab_menu_bg"
    9.             android:drawableTop="@drawable/tab_menu_channel"
    10.             android:text=“文字” />



    样式

    选中和非选中的顶部图标样式

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <selector xmlns:android="http://schemas.android.com/apk/res/android">
    3.     <item android:drawable="@mipmap/tab_channel_pressed" android:state_selected="true" />
    4.     <item android:drawable="@mipmap/tab_channel_normal" />
    5. </selector>


     

    Activity实现View.OnClickListener的点击方法

    1. public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    2. private TextView txt_channel;
    3. @Override
    4.     protected void onCreate(Bundle savedInstanceState) {
    5.         super.onCreate(savedInstanceState);
    6.         //省略….
    7. //获取viewtext
    8.        txt_channel = (TextView) findViewById(R.id.txt_channel);
    9. //添加点击事件
    10.         txt_channel.setOnClickListener(this);
    11.         txt_channel.performClick();   //模拟一次点击,既进去后选择第一项
    12. //省略其他项。。。。
    13.     }
    14.    @Override
    15.     public void onClick(View v) {
    16. // 根据点击的view的id来让对应的TextView选中
    17.        FragmentTransaction fTransaction = fManager.beginTransaction();
    18. //隐藏
    19.         hideAllFragment(fTransaction);
    20.         switch (v.getId()){
    21.             case R.id.txt_channel:
    22. //让所有viewtext 都不被选中
    23.                 setSelected();
    24. //让当前点击中的viewtext选中
    25.                 txt_channel.setSelected(true);
    26. //省略…..
    27.                 break;
    28.         }
    29.     }
    30. }


    RadioGroup&& RadioButton

    android的radio没有像html那样通过name来分组,而是更加直观的用RadioGroup包括的就为一组

    xml标签

    1. <RadioGroup
    2.         android:id="@+id/rg_tab_bar"
    3.         android:layout_width="match_parent"
    4.         android:layout_height="56dp"
    5.         android:layout_alignParentBottom="true"
    6.         android:background="@color/bg_white"
    7.         android:orientation="horizontal">
    8.         <RadioButton
    9.             android:id="@+id/rb_channel"
    10.             style="@style/tab_menu_item"
    11.             android:drawableTop="@drawable/tab_menu_channel"
    12.             android:text="@string/tab_menu_alert" />
    13.         <RadioButton
    14.             android:id="@+id/rb_message"
    15.             style="@style/tab_menu_item"
    16.             android:drawableTop="@drawable/tab_menu_message"
    17.             android:text="@string/tab_menu_profile" />
    18.     </RadioGroup>



    因为radiobutton有相同的样式,所以都抽到了@type/tab_men.xml了

    radiobutton的样式和viewtext的几乎一样不过需要把selected 状态修改成checked,这里就不再展示修改后的样式

    Activity实现RadioGroup.OnCheckedChangeListener

    1. public class MainActivity extends AppCompatActivity implements RadioGroup.OnCheckedChangeListener{
    2.    private RadioGroup rg_tab_bar;
    3.     private RadioButton rb_channel;
    4.    
    5. @Override
    6.     protected void onCreate(Bundle savedInstanceState) {
    7.         //省略。。。。。
    8. //获取radiogroup
    9.         rg_tab_bar = (RadioGroup) findViewById(R.id.rg_tab_bar);
    10. //监听radiogroup的变化事件
    11.         rg_tab_bar.setOnCheckedChangeListener(this);
    12.         //获取第一个单选按钮,并设置其为选中状态
    13.         rb_channel = (RadioButton) findViewById(R.id.rb_channel);
    14.         rb_channel.setChecked(true);
    15.     }
    16.    @Override
    17.     public void onCheckedChanged(RadioGroup group, int checkedId) {
    18.         switch (checkedId){
    19.             case R.id.rb_channel:
    20.                 //dosomething
    21.                 break;
    22.      }
    23. }

    到此本篇结束。本篇笔记主要从web前端的角度出发对比radio组建和模拟radio的区别以及在web和android上面分别实现

  • 相关阅读:
    【数据结构】堆的详解
    Linux编辑器-vim使用
    PHP代码审计入门-DVWA靶场命令注入篇
    “蔚来杯“2022牛客暑期多校训练营10,签到题HFIE
    【Redis知识点总结】(二)——Redis高性能IO模型剖析
    ESP8266-Arduino网络编程实例-BME280传感器数据仪表显示
    Power BI 傻瓜入门 10. 完善数据模型
    浏览器绑定快捷键KeyboardEvent
    深度学习必备Python基础知识充电3
    MongoDB 解析:灵活文档数据库与 Docker Compose 部署
  • 原文地址:https://blog.csdn.net/u014071104/article/details/127124068