Android 第十课——UI RadioButton

经常使用基础空组件html

5 RadioGroup RadioButtonjava

    单选按钮时经常使用组件之一,可是开发过程当中虽然不少地方会用到单选按钮,可是却不会用Android系统提供的原始样式,相似咱们在写html时,不一样的浏览器提供的单选按钮是不同的,兼容性也不好,通常用图片替代假装。可是不管如何假装样式,单选按钮的功能都是同样的。下面就用一个 加减乘除 运算器来说解单选按钮的功能,至于样式之后提供。android

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中组件:
app

   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();
	}
    	
    }

注意:ide

1)单选按钮RadioButton不能单独存在,他必须有明确的分组RadioGroup,即每个RadioButton都应该是RadioGroup的子组件。this

2)给每个RadioGroup和RadioButton注册一个ID,便于java程序中获取spa

3)checked="true" 表示按钮默认被选中,使用单选按钮时最好有一个默认选中的选项,不然你干吗不使用多选按钮呢?code

4)在java程序Activity的onCreate方法中咱们只需获取RadioGroup,而后为RadioGroup注册事件监听,这个事件监听是一个 OnCheckedChangeListener 的实例对象,同时咱们要实现onCheckedChanged方法。在监听器中咱们能够经过参数获取哪一个RadioButton被选中。这是与Button或CheckBox最大的区别,他们都是对单独的按钮注册事件监听。也能够经过radioGroup.getCheckedRadioButtonId()获取被选中的RadioButton的id。xml

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);
    }

   

}

图片:

相关文章
相关标签/搜索