单选框和复选框
单选框(RadioButton)和复选框(CheckBox)都是继承时了Button类,因此它们都支持Button支持的各种属性和方法。RadioBurron和CheckBox的区别在于:一组RadioButton每次只能选择一个,所以RadioButton需要和RadioGroup一起使用。
示例程序
XML文件
<?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"
android:padding="15dp">
<!--单选框必须放在单选组框中-->
<RadioGroup
android:id="@+id/sexRadioGroup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingLeft="15dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="20dp"
android:text="性别:"
android:textColor="@color/colorBlue"
android:textSize="24sp" />
<RadioButton
android:id="@+id/manRadioButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="15dp"
android:text="男"
android:textSize="24sp" />
<RadioButton
android:id="@+id/womenRadioButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="女"
android:textSize="24sp" />
</RadioGroup>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:paddingLeft="25dp"
android:text="你喜欢吃的食物:"
android:textColor="@color/colorOrange"
android:textSize="22sp" />
<HorizontalScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="15dp">
<CheckBox
android:id="@+id/checkbox1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="西红柿"
android:textSize="24sp" />
<CheckBox
android:id="@+id/checkbox2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="辣椒"
android:textSize="24sp" />
<CheckBox
android:id="@+id/checkbox3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="白菜"
android:textSize="24sp" />
<CheckBox
android:id="@+id/checkbox4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="土豆"
android:textSize="24sp" />
<CheckBox
android:id="@+id/checkbox5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="鸡蛋"
android:textSize="24sp" />
</LinearLayout>
</HorizontalScrollView>
</LinearLayout>
.java文件
package com.kong.viewtext;
import android.os.Bundle;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
/*
(1)创建一个继承了AppCompatActivity的类(Activity的本质就是类)
(2)在活动清单中声明该活动,不然会找不到。
(3)重写onCreate方法
(4)创建对应的XML文件(如果需要的话)
(5)设置该界面的UI(setContentView)
*/
public class RadioButtonTestActivity extends AppCompatActivity {
private RadioGroup m_RadioGroup;
private TextView m_TextView;
private CheckBox check1,check2,check3,check4,check5;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_radiobutton_text);
m_RadioGroup=findViewById(R.id.sexRadioGroup);
m_RadioGroup.setOnCheckedChangeListener(new MyOnCheckedChange());
m_TextView=findViewById(R.id.resultsTextView);
CheckBoxCheckedChangeListener changeListener=new CheckBoxCheckedChangeListener();
check1=findViewById(R.id.checkbox1);
check1.setOnCheckedChangeListener(changeListener);
check2=findViewById(R.id.checkbox2);
check2.setOnCheckedChangeListener(changeListener);
check3=findViewById(R.id.checkbox3);
check3.setOnCheckedChangeListener(changeListener);
check4=findViewById(R.id.checkbox4);
check4.setOnCheckedChangeListener(changeListener);
check5=findViewById(R.id.checkbox5);
check5.setOnCheckedChangeListener(changeListener);
}
private class CheckBoxCheckedChangeListener implements CompoundButton.OnCheckedChangeListener
{
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked)
{
Toast.makeText(RadioButtonTestActivity.this,buttonView.getText(),Toast.LENGTH_SHORT).show();
}
}
}
//重写RadioGroup的onChangedListener
private class MyOnCheckedChange implements RadioGroup.OnCheckedChangeListener
{
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
String str=((RadioButton)(group.findViewById(checkedId))).getText().toString();
Toast.makeText(RadioButtonTestActivity.this,str,Toast.LENGTH_SHORT).show();
}
}
}
运行结果
状态开关按钮和开关
转态开关按钮(ToggleButton)和开关(switch)也是由Button派生出来的,因此它们的本质也是按钮,Button支持的各种属性,方法也是用于ToggleButton和Switc。从功能上来看,ToggleButton、switch与CheckBox复选框非常的相似,它们都可以提供了两种状态。不过,ToggleButton、switch与checkBox的区别主要体现在功能上,ToggleButton、switch通常用于切换程序中的某种状态。
示例程序
XML文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linear"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center_horizontal"
android:padding="15dp">
<ImageView
android:id="@+id/imageLight"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/on_light"
android:layout_marginBottom="20dp"/>
<ToggleButton
android:id="@+id/toggleButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textOn="开灯"
android:textOff="关灯"
android:textSize="24sp"
android:background="@color/colorIndigo"/>
<Switch
android:id="@+id/switchDark"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="黑夜模式"
android:textColor="@color/colorOrange"
android:layout_gravity="left"
android:textSize="24sp"/>
</LinearLayout>
.java文件
package com.kong.viewtext;
import android.graphics.Color;
import android.os.Bundle;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Switch;
import android.widget.ToggleButton;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
public class ToggleButtonTestActivity extends AppCompatActivity {
private ImageView m_ImageLight;
private ToggleButton m_ToggleButton;
private LinearLayout m_Linear;
private Switch m_Switch;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_togglebutton_test);
m_ImageLight = findViewById(R.id.imageLight);
m_ToggleButton = findViewById(R.id.toggleButton);
m_Linear = findViewById(R.id.linear);
m_Switch = findViewById(R.id.switchDark);
//m_Switch.setOnCheckedChangeListener(new ToggleButtonOnCheckChange());
m_ToggleButton.setOnCheckedChangeListener(new ToggleButtonOnCheckChange());
}
private class ToggleButtonOnCheckChange implements CompoundButton.OnCheckedChangeListener {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
m_ImageLight.setImageResource(R.drawable.off_light);
if (m_Switch.isChecked()) {
//当点击黑夜模式时,关灯后背景为黄色
m_Linear.setBackgroundColor(Color.rgb(255, 255, 0));
}
else
{
//当点击黑夜模式时,关灯后的背景为黑色
m_Linear.setBackgroundColor(Color.rgb(0, 0, 0));
}
} else {
m_ImageLight.setImageResource(R.drawable.on_light);
m_Linear.setBackgroundColor(Color.rgb(255, 255, 255));
}
}
}
}