文档章节

Android 第十课——UI RadioButton

learn_more
 learn_more
发布于 2015/01/06 23:03
字数 1157
阅读 318
收藏 3

常用基础空组件

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

   

}

图片:

© 著作权归作者所有

learn_more
粉丝 93
博文 240
码字总数 210196
作品 0
深圳
程序员
私信 提问
多排radiobutton单选

3排radiobutton分别用3个radiogroup包含: 布局如下: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layoutwidth="matchparent" android:layouthei......

STaR_枫
2013/12/09
121
0
Android基础教程(七)之----单选项框RadioGroup的综合应用

大家好,我们今天这一节要介绍的是RadioGroup 的组事件.RadioGroup 可将各自不同的RadioButton ,设限于同一个Radio 按钮组,同一个RadioGroup 组里的按钮,只能做出单一选择(单选题). 首先,我们...

神勇小白鼠
2011/01/06
366
0
android 自定义 radiobutton 文字颜色随选中状态而改变

先看效果 主要是写一个 color selector 在res/建一个文件夹取名color res/color/color_radiobutton.xml <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.......

韩工
2012/05/22
8.4K
2
ViewPager+RadioButton仿QQ效果

RadioButton是自己定制的, 设置android:button="@null" 然后再设置backgroud。 涉及到的问题: 1、如何让RadioGroup在底部,且RadioGroup和Viewpager互不遮挡: 先定义RadioGroup,设置ali...

亓斌哥哥
2014/09/21
10.2K
2
[Android开发]关于RadioButton的checked问题

在Android的UI控件中,关于RadioXX有两个控件,一个是RadioGroup,一个是RadioButton。 顾名思义,一般情况下,会使用RadioGroup作为RadioButton的父控件。 如何设置RadioButton的选中状态 ...

Haffe
2014/09/28
5
0

没有更多内容

加载失败,请刷新页面

加载更多

spring cloud

一、从面试题入手 1.1、什么事微服务 1.2、微服务之间如何独立通讯的 1.3、springCloud和Dubbo有哪些区别 1.通信机制:DUbbo基于RPC远程过程调用;微服务cloud基于http restFUL API 1.4、spr...

榴莲黑芝麻糊
7分钟前
0
0
Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
昨天
6
0
maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
昨天
8
0
详解箭头函数和普通函数的区别以及箭头函数的注意事项、不适用场景

箭头函数是ES6的API,相信很多人都知道,因为其语法上相对于普通函数更简洁,深受大家的喜爱。就是这种我们日常开发中一直在使用的API,大部分同学却对它的了解程度还是不够深... 普通函数和...

OBKoro1
昨天
7
0
轻量级 HTTP(s) 代理 TinyProxy

CentOS 下安装 TinyProxy yum install -y tinyproxy 启动、停止、重启 # 启动service tinyproxy start# 停止service tinyproxy stop# 重启service tinyproxy restart 相关配置 默认...

Anoyi
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部