常用基础空组件
5 RadioGroup RadioButton
单选按钮时常用组件之一,但是开发过程中虽然很多地方会用到单选按钮,但是却不会用Android系统提供的原始样式,类似我们在写html时,不同的浏览器提供的单选按钮是不一样的,兼容性也很差,一般用图片替代伪装。但是无论如何伪装样式,单选按钮的功能都是一样的。下面就用一个 加减乘除 运算器来讲解单选按钮的功能,至于样式以后提供。
layout中组件:
<RadioGroup
android:id="@+id/operation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<RadioButton
android:id="@+id/addition"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="@string/addition"/>
<RadioButton
android:id="@+id/subtraction"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/subtraction"/>
</RadioGroup>
Activity中组件:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取RadioGroup
radioGroup = (RadioGroup)this.findViewById(R.id.operation);
// 为RadioGroup注册事件监听(当单选按钮被选中时这个类的onCheckedChanged方法被触发)
radioGroup.setOnCheckedChangeListener(new MainActivity.RadioGroupDefineImpl());
}
// Activity内部类,实现OnCheckedChangeListener接口同时实现onCheckedChanged方法
class RadioGroupDefineImpl implements OnCheckedChangeListener{
@Override
public void onCheckedChanged(RadioGroup group, int id) {
// TODO Auto-generated method stub
// group就是被选中那个Radio所属的组RadioGroup对象,id则是被选中那个Radio的id,所以通过如下方式可以获取RadioButton,也可以通过radioGroup.getCheckedRadioButtonId()获取id
RadioButton radio = (RadioButton)MainActivity.this.findViewById(id);
Toast.makeText(MainActivity.this, radio.getText(), Toast.LENGTH_SHORT).show();
}
}
注意:
1)单选按钮RadioButton不能单独存在,他必须有明确的分组RadioGroup,即每一个RadioButton都应该是RadioGroup的子组件。
2)给每一个RadioGroup和RadioButton注册一个ID,便于java程序中获取
3)checked="true" 表示按钮默认被选中,使用单选按钮时最好有一个默认选中的选项,否则你干嘛不使用多选按钮呢?
4)在java程序Activity的onCreate方法中我们只需获取RadioGroup,然后为RadioGroup注册事件监听,这个事件监听是一个 OnCheckedChangeListener 的实例对象,同时我们要实现onCheckedChanged方法。在监听器中我们可以通过参数获取哪个RadioButton被选中。这是与Button或CheckBox最大的区别,他们都是对单独的按钮注册事件监听。也可以通过radioGroup.getCheckedRadioButtonId()获取被选中的RadioButton的id。
5)当我们在java程序中具体判断按个单选按钮被选中时,一般使用ID如下判断:
int operation = radioGroup.getCheckedRadioButtonId()
switch(operation){
case R.id.subtraction:
// coding
break;
}
下面是一个使用RadioButton做的加减乘除运算器:
layout.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<EditText
android:id="@+id/param1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/defalut0"
android:inputType="number"
/>
<RadioGroup
android:id="@+id/operation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<RadioButton
android:id="@+id/addition"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:text="@string/addition"/>
<RadioButton
android:id="@+id/subtraction"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/subtraction"/>
<RadioButton
android:id="@+id/multiplication"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/multiplication"/>
<RadioButton
android:id="@+id/division"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/division"/>
</RadioGroup>
<EditText
android:id="@+id/param2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"
android:text="@string/defalut0"/>
<Button
android:id="@+id/mainActivity_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/mainActivity_result"
/>
<TextView android:id="@+id/result"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/defalut0"/>
</LinearLayout>
java Activity:
package com.hnust.moon;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends ActionBarActivity {
private static final String TAG = MainActivity.class.getSimpleName();
private RadioGroup radioGroup;
private Button btn;
private EditText param1;
private EditText param2;
private TextView rsv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
param1 = (EditText)MainActivity.this.findViewById(R.id.param1);
param2 = (EditText)MainActivity.this.findViewById(R.id.param2);
rsv = (TextView)MainActivity.this.findViewById(R.id.result);
btn = (Button)this.findViewById(R.id.mainActivity_btn);
btn.setOnClickListener(new MainActivity.ButtonDefineImpl());
radioGroup = (RadioGroup)this.findViewById(R.id.operation);
radioGroup.setOnCheckedChangeListener(new MainActivity.RadioGroupDefineImpl());
}
class RadioGroupDefineImpl implements OnCheckedChangeListener{
@Override
public void onCheckedChanged(RadioGroup group, int id) {
// TODO Auto-generated method stub
RadioButton radio = (RadioButton)MainActivity.this.findViewById(id);
Toast.makeText(MainActivity.this, radio.getText(), Toast.LENGTH_SHORT).show();
}
}
/**
*
* @author heweipo
*
*/
class ButtonDefineImpl implements OnClickListener{
@Override
public void onClick(View view) {
// TODO Auto-generated method stub
int operation = radioGroup.getCheckedRadioButtonId();
rsv.setText(calcurateResult(operation, Integer.parseInt(param1.getText().toString()), Integer.parseInt(param2.getText().toString()))+"");
}
}
private int calcurateResult(int operation , int param1 , int param2){
int result = 0;
switch(operation){
case R.id.subtraction:
result = param1 - param2;
break;
case R.id.multiplication:
result = param1 * param2;
break;
case R.id.division:
if(param2 == 0){Toast.makeText(this, "除数不能为0", Toast.LENGTH_SHORT).show();break;}
result = param1 / param2;
break;
default:
result = param1 + param2;
break;
}
return result;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0, 8080, 1, R.string.exit);
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.action_settings:
break;
case R.id.menu_addition:
radioGroup.check(R.id.addition);
rsv.setText(calcurateResult(R.id.addition, Integer.parseInt(param1.getText().toString()), Integer.parseInt(param2.getText().toString()))+"");
break;
case R.id.menu_subtraction:
radioGroup.check(R.id.subtraction);
rsv.setText(calcurateResult(R.id.subtraction, Integer.parseInt(param1.getText().toString()), Integer.parseInt(param2.getText().toString()))+"");
break;
case R.id.menu_multiplication:
radioGroup.check(R.id.multiplication);
rsv.setText(calcurateResult(R.id.multiplication, Integer.parseInt(param1.getText().toString()), Integer.parseInt(param2.getText().toString()))+"");
break;
case R.id.menu_division:
radioGroup.check(R.id.division);
rsv.setText(calcurateResult(R.id.division, Integer.parseInt(param1.getText().toString()), Integer.parseInt(param2.getText().toString()))+"");
break;
case 8080:
finish();
break;
}
return super.onOptionsItemSelected(item);
}
}
图片:
来源:oschina
链接:https://my.oschina.net/u/1989321/blog/364499