Android 第十课——UI RadioButton

常用基础空组件

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

   

}

图片:

时间: 2024-10-18 03:45:34

Android 第十课——UI RadioButton的相关文章

Android 第十一课——UI Checkbox

常用基础空组件 6 CheckBox 复选框是常用组件之一,但是开发过程中虽然很多地方会用到复选框,但是却不会用Android系统提供的原始样式,类似我们在写html时,不同的浏览器提供的复选框按钮是不一样的,兼容性也很差,一般用图片替代伪装.但是无论如何伪装样式,复选框的功能都是一样的. layout中组件:        <CheckBox               android:id="@+id/cb1"              android:layout_widt

Android 第八课——UI布局2

Android布局分为:线性布局.相对布局.表格布局.帧布局.网格布局五种 1)FrameLayout(帧布局) 帧布局是最简单的布局对象,它被定制为用户屏幕上的一个空白备用区域,之后用户可以在其中填充一个单一对象,例如一张图片等.所有的子元素将会固定在屏幕左上角:我们不能为FrameLayout中的一个子元素指定一个位置.而且新增的子元素将会直接覆盖填充旧的子元素,类似于一个栈结构,当然也不一定是全部挡住,这样看透明度以及大小来决定. <FrameLayout xmlns:android= &qu

Android 第七课——UI布局

Android布局分为:线性布局.相对布局.表格布局.帧布局.网格布局五种 布局中的距离单位:dp.px.sp. 布局继承关系图: 1)熟悉几个常用属性 <Button android:id="@+id/loginName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/login&quo

Android之十二微信UI界面设计

Android之十二微信UI界面设计 corners_bg.xml <span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color=&qu

Android基础知识(1)——UI编程

我学习android一段时间了,看着大牛们的各种神博客,心里也痒痒的,希望有一天也能成为他们一样. 我知道,这些都是一滴一滴的积累,所有我也需要找到我的学习方法,打好基础,做出属于我自己的成果. 当然,作为一名菜鸟程序员,更加要懂得把知识整理归类,方便记忆. ----------------------------------------------------------- 在学校里听老师讲课,总会让学生误会程序员的主要工作不是界面美化,那都是美工做得事情.但随着移动开发的不断发展,在软件开发

Android控件系列之RadioButton&amp;RadioGroup

学习目的: 1.掌握在Android中如何建立RadioGroup和RadioButton 2.掌握RadioGroup的常用属性 3.理解RadioButton和CheckBox的区别 4.掌握RadioGroup选中状态变换的事件(监听器) RadioButton和CheckBox的区别: 1.单个RadioButton在选中后,通过点击无法变为未选中 单个CheckBox在选中后,通过点击可以变为未选中 2.一组RadioButton,只能同时选中一个 一组CheckBox,能同时选中多个

Android之十SlidingMenu侧滑菜单的实现分析

Android之十SlidingMenu侧滑菜单的实现分析 SlidingMenu侧滑菜单是一种比较新的设置界面或配置界面的效果,在主界面左滑或者右滑出现设置界面效果,能方便的进行各种操作.很多优秀的应用都采用了这种界面方案,像facebook.人人网.everynote.Google+.网易新闻.知乎日报.有道云笔记等等 侧滑菜单实现原理: 在一个Activity的布局中需要有两部分,一个是菜单(menu)的布局,一个是内容(content)的布局.两个布局横向排列,菜单布局在左,内容布局在右

android单选按钮选择,RadioGroup,radioButton

android单选按钮选择,RadioGroup,radioButton 14. 四 / android基础 / 没有评论 单选布局绑定 如何识别选择

50个Android开发人员必备UI效果源码[转载]

50个Android开发人员必备UI效果源码[转载] http://blog.csdn.net/qq1059458376/article/details/8145497 Android 仿微信之主页面实现篇Android 仿微信之界面导航篇Android 高仿QQ 好友分组列表Android 高仿QQ 界面滑动效果Android 高仿QQ 登陆界面Android 对Path的旋转效果的拓展Android高仿360安全卫士布局源码Android SlidingDrawer 滑动抽屉效果Androi