实现按钮式单选

很多时候,老大可能会要求你做出这样的单选效果,如下图:


实现按钮式单选_第1张图片


小弟想到三种方法来实现,在此献丑总结一下。


一、最省事省力的一种

使用RadioGroup,只要轻轻地对RadioGroup进行适当的设置,就能达到这样的效果了,请见下面的xml文件:

	
		
		
	

其中,使用到的两个selector,如下:

背景颜色:selector_bg_choice.xml



	
	
	
	
	
	
	

文字颜色:selector_text_color.xml



	
	
	
	

PS:看了大家会发现,两个selector中,为啥一个是android:drawable另一个是android:color呢?

这是由使用到它的地方决定的,第一个selector使用在android:backgroud属性,这个属性需要一个drawable;而第二个selector使用在android:textColor,这个属性需要一个color。


二、较省力的一种

使用多个CheckBox(或者ToggleButton),布局如下:

	
		
		
		
	

但还需要在程序里进行一些小设置:

		// 第二种方法:使用多个CheckBox实现
		CheckBox cb1 = (CheckBox) findViewById(R.id.cb_one);
		CheckBox cb2 = (CheckBox) findViewById(R.id.cb_two);
		CheckBox cb3 = (CheckBox) findViewById(R.id.cb_three);
		cb1.setOnClickListener(this);
		cb2.setOnClickListener(this);
		cb3.setOnClickListener(this);
		mChecks = new CheckBox[] { cb1, cb2, cb3 };

	@Override
	public void onClick(View v) {
		for (CheckBox cb : mChecks) {
			cb.setChecked(v == cb);
		}
	}
 在程序中,需要保证只有一个CheckBox被check,就酱。


三、比较蛋碎的一种实现,但也能达到效果。

就是使用TabHost/TabWidget

	
		
		
	

		// 第三种方法:使用TabHost实现
		TabHost tabhost = (TabHost) findViewById(R.id.th_tabhost);
		tabhost.setup();
		tabhost.addTab(tabhost.newTabSpec("male").setIndicator(newTab("Male")).setContent(mTabContentFactory));
		tabhost.addTab(tabhost.newTabSpec("female").setIndicator(newTab("Female")).setContent(mTabContentFactory));
	}

	private TabContentFactory mTabContentFactory = new TabContentFactory() {

		@Override
		public View createTabContent(String tag) {
			return new View(MainActivity.this);
		}
	};

	private View newTab(String text) {
		LayoutInflater inflater = LayoutInflater.from(this);
		TextView tv = (TextView) inflater.inflate(R.layout.layout_tab, null);
		tv.setText(text);
		return tv;
	}

这种方法就有点浪费资源了,毕竟TabHost不是为了实现这么一个小功能的...



好吧,写这篇文章,其一的目的是想让大家了解下selector的作用,这可是个好东东啊,不要拘泥于eclipse提示的属性,除了drawable,还可以写别的属性的!再者,就是希望大家多去了解Android原生的控件和它们的属性,用原生的组件变化、组合成自己想要的控件,也是一件很有意思的事情。


demo下载:http://download.csdn.net/detail/ueryueryuery/7729883


你可能感兴趣的:(Android)