专栏首页逆向技术Android 开发第七讲 RadioButton (单选按钮)

Android 开发第七讲 RadioButton (单选按钮)

Android 开发第七讲 RadioButton (单选按钮)

一丶重构代码

之前我们响应按钮事件都是直接通过匿名内部类的方式. new一个对象来实现OnClick方法.

现在因为按钮较多.所以新建内部类,实现接口为 View.OnClickListener 并且实现里面的OnClick方法

代码如下:

package com.ibinary.myapplication;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.sax.StartElementListener;
import android.view.View;
import android.widget.Button;
// Alt + Shift + Entery 引入此包
public class MainActivity extends AppCompatActivity {

//    声明Button 一会使用 如果找不到则引入这个包 Alt+Shift+Enter
    private Button m_BtnText;
    private Button m_BtnEditView;
    private Button m_ButtonView;
    private Button m_RadioButtonView;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        m_BtnText = (Button) findViewById(R.id.Btn_Text);
        m_BtnEditView = (Button) findViewById(R.id.EdtView1);
        m_ButtonView = (Button) findViewById(R.id.m_BtnView);
        m_RadioButtonView = (Button) findViewById(R.id.RadioButton_Id);
        SetListener();
    }
    private void SetListener()
    {
        MyOnClick myOnClick = new MyOnClick();
        m_BtnText.setOnClickListener(myOnClick);
        m_BtnEditView.setOnClickListener(myOnClick);
        m_ButtonView.setOnClickListener(myOnClick);
        m_RadioButtonView.setOnClickListener(myOnClick);
    }
//    实现接口,在街口里面判断
    private class MyOnClick  implements View.OnClickListener{

    @Override
    public void onClick(View view) {

        Intent intent = null;
        switch (view.getId()){
            case R.id.Btn_Text:
                //跳转到TextView中
                intent = new Intent(MainActivity.this,TextViewActive.class);
                break;
            //跳转到Button页面
            case R.id.m_BtnView:
                intent =  new Intent(MainActivity.this,MyButton.class);
                break;
            //跳转到ExtView页面
            case R.id.EdtView1:
                intent = new Intent(MainActivity.this,EdtActive.class);
                break;
            //跳转到RadioButton页面
            case R.id.RadioButton_Id:
                intent = new Intent(MainActivity.this,RadioActivity.class);
                break;
        }
        if (intent == null) {
            return;
        }

        startActivity(intent);
    }
}
}

二丶RadioButton属性与xml编写

2.1 RadioButton属性

RadioButton是继承自TextView 所以一些属性是可以用的.

单独定义一个RadioButton不会有效果的.原因是.两个RadioButton以上. 都属于一个分组.

当这个分组中定义了两个 RadioButton的时候.那么你点击RadioButton1 那么RadioButton2就是未选中状态.看下如下xml描述

常用属性

android:checked = "true"  默认选中,使用这个属性那么 其他的RadioButton必须设置ID
android:button="@null"   去掉按钮属性,不使用小园框,自定义一个
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="15dp">

<!--    使用RadioButton必须放到一个分组里面-->
    <RadioGroup
        android:id="@+id/rg_1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
<!--        RadioButton放到里面-->
        <RadioButton
            android:id="@+id/rd_1"
            android:layout_width="100dp"
            android:layout_height="40dp"
            android:text="男"
            android:textSize="20sp">

        </RadioButton>


        <RadioButton
            android:id="@+id/rd_2"
            android:layout_width="100dp"
            android:layout_height="40dp"
            android:text="女"
            android:textSize="20sp">

        </RadioButton>

    </RadioGroup>
</RelativeLayout>

界面则为下,选择男,则女就是未选中,否则就是相反

因为他们在一个组里面.所以只能单选

2.2 RadioButton实现自定义

实现自定义还是使用 android:background属性,来制定一个选择状态的xml. 来实现自定义的选中和未选中

但是前提要 设置 android:button="@null"才可以.

状态选择器XML如下

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:tools="http://schemas.android.com/tools"
    xmlns:android="http://schemas.android.com/apk/res/android"
    tools:ignore="MissingDefaultResource">
    <!--    状态选择器 android:state_checked = true代表选中-->
    <item android:state_checked="true">
        <!--        如果是选中,那么我们使用shape画一个-->
        <shape>
            <!--            设置实心颜色,并且设置圆角-->
            <solid android:color="#ff0000"></solid>
            <corners android:radius="10dp"></corners>
        </shape>
    </item>

    <!--    否则设置为绿色-->
    <item android:state_checked="false">
        <!--        如果是未选中,那么我们使用shape画一个-->
        <shape>
            <!--            设置描边形式,并且设置圆角-->
            <stroke android:width="1dp" android:color="#0ca30c"></stroke>
            <corners android:radius="10dp"></corners>
        </shape>
    </item>
</selector>

xml如下布局如下

   <!--    自定义-->
    <RadioGroup
        android:id="@+id/rg_2"
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:orientation="horizontal"
        android:layout_below="@id/rg_1"
        android:layout_marginTop="1dp"
        >
        <!--        RadioButton放到里面-->
        <RadioButton
            android:id="@+id/rd_3"
            android:layout_width="100dp"
            android:layout_height="40dp"
            android:button="@null"
            android:background="@drawable/selector_radiobutton"
            android:text="男1"
            android:textSize="20sp">

        </RadioButton>


        <RadioButton
            android:id="@+id/rd_4"
            android:layout_width="100dp"
            android:layout_height="40dp"
            android:button="@null"
            android:background="@drawable/selector_radiobutton"
            android:text="女1"
            android:textSize="20sp">

        </RadioButton>

    </RadioGroup>

请注意selector_radiobutton 文件名一定小写.

实现效果如下

自定义了一个实现效果

三丶RadioButton的监听事件

既然是单选那么单选之后肯定会有监听事件

package com.ibinary.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;

public class RadioActivity extends AppCompatActivity {

    private RadioGroup m_rg1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_radio);

        m_rg1 = (RadioGroup)findViewById(R.id.rg_1);
        //响应Checked Listener
        m_rg1.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            //两个参数,一个是组,一个是选中的ID. 可以通过组里面的finviewById找到当前是哪个Id
            public void onCheckedChanged(RadioGroup radioGroup, int i) {
                RadioButton RaButton = radioGroup.findViewById(i);
                Toast.makeText(RadioActivity.this, RaButton.getText(), Toast.LENGTH_SHORT).show();
            }
        });
    }
}

只需要设置事件,实现 RadioGroup.OnCheckedChangeListener() 即可.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Android单选按钮RadioButton的使用详解

    RadioButton是最普通的UI组件之一,继承了Button类,可以直接使用Button支持的各种属性和方法。

    砸漏
  • 安卓开发_单选按钮控件(RadioButton)的简单使用

    听着music睡
  • [Android学习]之解析练习RadioButton+Fragment+viewpager布局架构

    项勇
  • 新浪微博布局学习——妙用TabHost

    为了更好的开发Android应用程序,除了熟练掌握基本的UI组件和API外,还需要掌握一些技巧,而这些技巧可以通过阅读一些代码来提高,本系列将与大家分享一些新浪...

    飞雪无情
  • Android开发笔记(三十七)按钮类控件

    Button是文本按钮(继承自TextView),而ImageButton是图像按钮(继承自ImageView)。两者之间的区别在于: 1、Button即...

    用户4464237
  • CheckBox和RadioButton使用大全

    本期先来学习Button的两个子控件,无论是单选还是复选,在实际开发中都是使用的较多的控件,相信通过本期的学习即可轻松掌握。 一、CheckBox ...

    分享达人秀
  • 速读原著-Android应用开发入门教程(作为简单容器使用的视图组)

    单选按钮组(RadioButton)是一组逻辑上相关的按钮,它们之中只能有一个被选中,单选按钮通常单选按钮被设计成圆形的外观。因此需要一个类将各个单选按钮包含在...

    cwl_java
  • python开发_tkinter_单选按钮

    E | hongtenzone@foxmail.com  B | http://www.cnblogs.com/hongten

    Hongten
  • JavaSwing:JRadioButton-单选按钮开发详解

    与ButtonGroup对象一起使用以创建一组按钮,其中一次只能选择一个按钮。 (创建一个ButtonGroup对象,并使用其add方法在该组中包括JRadi...

    JavaEdge
  • 【详细】Android入门到放弃篇-YES OR NO-》各种UI组件,布局管理器,单元Activity

    人与人之间起初是陌生的,从了解到深知,到你与他(她)不分彼此时,你会丢下这个陪伴你的人吗?

    达达前端
  • 《Android》Lesson24-综合项目实战

    用户1733354
  • Android:常用布局介绍 & 属性设置大全

    本文主要介绍传统的5大布局,关于约束布局(ConstraintLayout)具体点击查看文章

    Carson.Ho
  • Kotlin学习日志(六)控件使用

    学习最重要的就是坚持了,笨鸟多飞,业精于勤荒于嬉,学如逆水行舟,不进则退。前面学了那么多关于函数、语法、类这些知识,确实是比较枯燥,但却是有必要的,因为这些都是...

    晨曦_LLW
  • Android控件与布局——基础控件RadioButton

    今天,我们的主题是基础控件RadioButton。在开始之前,我们还是以官方文档为开端来开始我们的讲解,下面是Android文档中对RadioButton的简介...

    233333
  • 安卓一步步从基础到精通自学教程,纯实战,纯干货(五)

    关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活。提供程序员技术及生活指导干货。

    做全栈攻城狮
  • SeleniumWebDriver处理复选框CheckBox和单选按钮RadioButton

    使用网页http://demo.guru99.com/test/radio.html作为练习,如下: 使用radio1.click() 切换到Option1单选...

    软测小生
  • 你不能错过的RadioButton实践

    上一篇给大家留的“课后作业”登录和注册相信小伙伴们根据我们提供的demo都已经完成啦,那么这一篇文章我们继续讲实战中会遇到的一些主要功能,话不多说,让我们进入今...

    下码看花
  • Android 必知必会 - RadioGroup 和 ViewPager 联动

    昨天设计图刚出一点,写了《Android 必知必会 - 动态切换着色模式和全屏模式》,记录了动态修改页面显示模式的方式。今天又有新图,不过设计师只考虑 iOS ...

    他叫自己MR.张
  • python爬虫--不限平台歌曲下载(收费也可)

    自己一直都想听胖伦的歌,但是网易云有下架了,其他音乐平台又需要会员 于是自己就尝试着看看能不能尝试通过爬虫把胖伦的歌下载下来。但是奈何博主自身的水平有限。如果...

    萌萌哒的瓤瓤

扫码关注云+社区

领取腾讯云代金券