一、前提
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属性,不然就实现不了这个功能
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();
}
});
}
}
四、总结
组件都是大同小异,我会继续完善