Android Studio开发学习(四)——RadioButton、CheckBox

一、前提

RadioButton也很常见,在我们填写注册信息时,有时就会让我们选择性别或是年级等等,CheckBox可以用来选取兴趣爱好

二、目标

1、RadioButton 单选框

2、CheckBox 复选框

三、内容

(一)RadioButton

1、常用属性

因为我们使用的单选框往往都是通过一组的方式来实现,所以我们在定义RadioButton时一定要在一个RadioGroup中

<RadioGroup
        android:id="@+id/rb1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        >
        <RadioButton
            android:id="@+id/radio1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="男"
            android:textSize="20sp"
            android:textColor="#FF6600"
            android:checked="true"
            />
        <RadioButton
            android:id="@+id/radio2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="女"
            android:textSize="20sp"
            android:textColor="#FF6600"
            />
</RadioGroup>

大部分属性都相同,有一些要注意的地方就是RadioGroup也有orientation属性,也可设置水平还是垂直;其次就是android:checked=“”这个选项指的是是否默认被选定,true表示被选定

切记:当你要设置选项被默认选定时,一定要设置RadioButton的id属性,不然就实现不了这个功能

扫描二维码关注公众号,回复: 10387302 查看本文章

          

2、自定义样式

我们看到大多数的单选按钮都是前面有一个圆圈,其实我们也可以自由的设置样式

<RadioGroup
        android:id="@+id/rb2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        >
        <RadioButton
            android:id="@+id/radio3"
            android:layout_width="50dp"
            android:layout_height="wrap_content"
            android:text="男"
            android:gravity="center"
            android:background="@drawable/shape"
            android:button="@null"
            android:textSize="20sp"
            android:textColor="#000000"
            android:checked="true"
            />
        <RadioButton
            android:id="@+id/radio4"
            android:layout_width="50dp"
            android:layout_height="wrap_content"
            android:button="@null"
            android:text="女"
            android:gravity="center"
            android:textSize="20sp"
            android:textColor="#000000"
            android:layout_marginLeft="30dp"
            android:background="@drawable/shape"
            />
    </RadioGroup>

我们想要自定义一个样式时,需要使用andorid:button="@null"这条属性,表示没有前面的圆圈,设置的样式也与以前的方式一样

定义一个shape.xml文件

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true">
        <shape>
            <solid android:color="#FF9900"/>
            <corners android:radius="5dp"/>
        </shape>
    </item>

    <item android:state_checked="false">
        <shape>
            <solid android:color="#FFFFFF"/>
            <corners android:radius="5dp"/>
        </shape>
    </item>
</selector>

在这里我们需要注意,要将属性改为state_checked,表示选中还是未选中,就不是之前的是否点击了

        

3、监听事件

当我们选中某一个按钮时提示我们选中了,此处需要在MainActivity中实现

package com.mingrisoft.radiobutton;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.CompoundButton;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    private RadioGroup radioGroup;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        radioGroup= (RadioGroup) findViewById(R.id.rb1);
        radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                RadioButton radioButton= (RadioButton) group.findViewById(checkedId);
                Toast.makeText(MainActivity.this, radioButton.getText(), Toast.LENGTH_SHORT).show();
            }
        });
    }
}

此处我们可以看到,这次我们需要获取的是一个单选按钮组的id属性,通过setOnCheckedChangeLinstener(检查是否改变)这个方法来实现,其中给了我们一个方法onCheckedChanged,他的两个参数意思是单选按钮组和此时选中的id的代表值(每一组中的RadioButton都有唯一的一个标识符,在创建RadioButton的时候就产生了),通过单选按钮组找到选中按钮的对应值,通过.getText()得到文本的方法,获取信息。

         

(二)CheckBox

1、常用属性

很熟悉,这次就不用将每一个选项都保存在一个组中

<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="请选择:"
        android:textSize="20sp"
        android:textColor="#000000"
        android:layout_marginBottom="10dp"
        />

    <CheckBox
        android:id="@+id/checkbox1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="唱歌"
        android:textSize="20sp"
        />
    <CheckBox
        android:id="@+id/checkbox2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="跳舞"
        android:textSize="20sp"
        />
    <CheckBox
        android:id="@+id/checkbox3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="rap"
        android:textSize="20sp"
        />
    <CheckBox
        android:id="@+id/checkbox4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="篮球"
        android:textSize="20sp"
        />

很简单,只用设置就好

2、自定义样式

和RadioButton一样,我们也可以给CheckBox设置自定义的样式,至于怎么设定,跟之前一样,编写一个新的xml文件,在background属性中调用

<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="请选择:"
        android:textSize="20sp"
        android:textColor="#000000"
        android:layout_marginTop="20dp"
        android:layout_marginBottom="10dp"
        />

    <CheckBox
        android:id="@+id/checkbox5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="唱歌"
        android:button="@drawable/bg"
        android:textSize="20sp"
        />
    <CheckBox
        android:id="@+id/checkbox6"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="跳舞"
        android:button="@drawable/bg"
        android:textSize="20sp"
        />
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="false"
        android:drawable="@drawable/no"
        />

    <item android:state_checked="true"
        android:drawable="@drawable/yes"/>
</selector>

在这里我添加了两张图片,当选中时是一张,没选中时是另一张,图片的话可以任意找,也可以用ps来完善一下,选中时图片变黑

          

3、监听事件

不再多说,大同小异,其中有一个三目运算符应该了解,a?b:c,表示若a为真则是b,为假则是c

package com.mingrisoft.checkbox;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    private CheckBox checkBox5,checkBox6;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        checkBox5= (CheckBox) findViewById(R.id.checkbox5);
        checkBox6= (CheckBox) findViewById(R.id.checkbox6);

        checkBox5.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                Toast.makeText(MainActivity.this,isChecked?"yes1":"no1", Toast.LENGTH_SHORT).show();
            }
        });

        checkBox6.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                Toast.makeText(MainActivity.this,isChecked?"yes2":"no2", Toast.LENGTH_SHORT).show();
            }
        });
    }

           

当然这个是为了测试,我们发现,当复选框只有几个的时候还比较好显示,但如果一多,五六个,是不是就要写五六个方法,而且Toast显示起来可能就会没完没了,所以我们可以继续完善这个代码,我们可以多添加一个Button然后点击它后显示我们选中的所有东西

修改的java代码如下

package com.mingrisoft.checkbox;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    private CheckBox checkBox5,checkBox6;
    private Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        checkBox5= (CheckBox) findViewById(R.id.checkbox5);
        checkBox6= (CheckBox) findViewById(R.id.checkbox6);
        button= (Button) findViewById(R.id.btn);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String str="";
                if(checkBox5.isChecked()){
                    str+=checkBox5.getText().toString();
                }
                if(checkBox6.isChecked()){
                    str+=checkBox6.getText().toString();
                }
                Toast.makeText(MainActivity.this, "您选择了:"+str, Toast.LENGTH_SHORT).show();
            }
        });
    }
}

四、总结

组件都是大同小异,我会继续完善

发布了16 篇原创文章 · 获赞 3 · 访问量 1094

猜你喜欢

转载自blog.csdn.net/qq_41890177/article/details/105233216