Android开发第七讲RadioButton(单选按钮)⽬录
Android 开发第七讲 RadioButton (单选按钮)
⼀⼂重构代码
之前我们响应按钮事件都是直接通过匿名内部类的⽅式. new⼀个对象来实现OnClick⽅法.
现在因为按钮较多.所以新建内部类,实现接⼝为 View.OnClickListener 并且实现⾥⾯的OnClick⽅法
代码如下:
package application;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
t.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;
htmlradio设置默认的按钮protected void onCreate(Bundle 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 (Id()){
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="schemas.android/apk/res/android"
xmlns:app="schemas.android/apk/res-auto"
xmlns:tools="schemas.android/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="schemas.android/tools"
xmlns:android="schemas.android/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 application;
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) {
setContentView(R.layout.activity_radio);
m_rg1 = (RadioGroup)findViewById(_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, Text(), Toast.LENGTH_SHORT).show(); }
});
}
}
只需要设置事件,实现 RadioGroup.OnCheckedChangeListener() 即可.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论