这里有三种方法可以实现:
第一种是:直接使用CheckBox,再使用代码来修改checkBox的选中状态;
优点:实现简单,容易懂
缺点:需要给每个checkBox设置id
第二种是:在RadioGroup中使用自定义的RadioButton(其实就是使用图片,改变效果);
优点:代码简单,多使用的是布局文件
缺点:布局文件不好调
第三种是:使用CheckBox+ListView实现;
优点:布局简单
缺点:代码多而复杂
一、第一种方法,只使用CheckBox实现单选
(1)配置文件activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="30dp"
android:background="#F5F5F5" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="以下情况,请代表根据实际情况打勾注明:"
android:textColor="#5E5E5E"
android:textSize="15sp" />
</LinearLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="12dp"
android:layout_marginTop="12dp"
android:text="1.通过调查研究形成:"
android:textColor="#9CE1FF"
android:textSize="15sp" />
<CheckBox
android:id="@+id/cb1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="12dp"
android:checked="true"
android:text="专题调研"
android:textColor="#5E5E5E"
android:textSize="15sp" />
<CheckBox
android:id="@+id/cb2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="12dp"
android:text="视察"
android:textColor="#5E5E5E"
android:textSize="15sp" />
<CheckBox
android:id="@+id/cb3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="12dp"
android:text="座谈"
android:textColor="#5E5E5E"
android:textSize="15sp" />
<CheckBox
android:id="@+id/cb4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="12dp"
android:text="走访等其他调研方式"
android:textColor="#5E5E5E"
android:textSize="15sp" />
</LinearLayout>
(2)主方法MainActivity.java
package com.example;
import com.example.aaa.R;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.CheckBox;
public class MainActivity extends Activity implements OnClickListener{
private CheckBox cb1,cb2,cb3,cb4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.aaaa);
this.cb1 = (CheckBox) findViewById(R.id.cb1);
this.cb2 = (CheckBox) findViewById(R.id.cb2);
this.cb3 = (CheckBox) findViewById(R.id.cb3);
this.cb4 = (CheckBox) findViewById(R.id.cb4);
cb1.setOnClickListener(this);
cb2.setOnClickListener(this);
cb3.setOnClickListener(this);
cb4.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.cb1:
cb1.setChecked(true);
cb2.setChecked(false);
cb3.setChecked(false);
cb4.setChecked(false);
break;
case R.id.cb2:
cb1.setChecked(false);
cb2.setChecked(true);
cb3.setChecked(false);
cb4.setChecked(false);
break;
case R.id.cb3:
cb1.setChecked(false);
cb2.setChecked(false);
cb3.setChecked(true);
cb4.setChecked(false);
break;
case R.id.cb4:
cb1.setChecked(false);
cb2.setChecked(false);
cb3.setChecked(false);
cb4.setChecked(true);
break;
default:
break;
}
}
}
二、第二种方法,使用自定义RadioButton实现单选CheckBox:
(1)在drawable文件中创建一个Raido.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:state_checked="false"
android:drawable="@drawable/tabswitcher_short" />
<item
android:state_checked="true"
android:drawable="@drawable/tabswitcher_long" />
</selector>
(2)布局文件activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="通过调查研究形成:" />
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<RadioGroup
android:id="@+id/radioGroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical" >
<RadioButton
android:id="@+id/btn_0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/radio"
android:layout_marginTop="1dp"
android:button="@null"
android:checked="true"
android:gravity="center" />
<RadioButton
android:id="@+id/btn_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="1dp"
android:background="@drawable/radio"
android:button="@null"
android:gravity="center" />
<RadioButton
android:id="@+id/btn_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="1dp"
android:background="@drawable/radio"
android:button="@null"
android:gravity="center" />
<RadioButton
android:id="@+id/btn_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="1dp"
android:background="@drawable/radio"
android:button="@null"
android:gravity="center" />
</RadioGroup>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/radioGroup"
android:layout_marginLeft="5dp"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="3dp"
android:text="专题调研" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="3dp"
android:text="视察" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="3dp"
android:text="座谈" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="3dp"
android:text="走访等其他调研方式" />
</LinearLayout>
</RelativeLayout>
</LinearLayout>
(3)MainActivity.java,在这里我实现的简单,其实可以等到要使用的时候再去获取选择的值:
package com.example;
import com.example.aaa.R;
import android.app.Activity;
import android.os.Bundle;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
public class MainActivity extends Activity{
private RadioGroup radioGroup;
private RadioButton radiobutton;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.aaaa);
radiobutton = (RadioButton) findViewById(R.id.btn_0);
radioGroup = (RadioGroup) this.findViewById(R.id.radioGroup);
radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
//System.out.println("checkID:"+checkedId);
System.out.println("radiobutton.isChecked():"+radiobutton.isChecked());
}
});
}
}
三、第三种方式,使用ListView+CheckBox实现CheckBox的单选框:
(1)创建一个adapter的布局文件list_adapter.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<CheckBox
android:id="@+id/checkBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginLeft="5dp"
android:clickable="false"
android:focusable="false"
android:focusableInTouchMode="false" />
<TextView
android:id="@+id/tv_name"
android:layout_width="210dp"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:textSize="14sp" />
</LinearLayout>
(2)布局文件activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/tv_title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="通过调查研究形成:" />
<ListView
android:id="@+id/listview"
android:layout_width="fill_parent"
android:layout_height="400dp"
android:cacheColorHint="#00000000"
android:clickable="true"
android:descendantFocusability="blocksDescendants"
android:fadingEdge="none"
android:fastScrollEnabled="true"
android:scrollingCache="false" />
</LinearLayout>
(3)主代码MainActivity.java:
package com.example;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.example.bbb.R;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity{
private ListView listView;
private Map<Integer, Boolean> isSelected;
private List<String> beSelectedData = new ArrayList<String>();
ListAdapter adapter;
private List<String> cs = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) this.findViewById(R.id.listview);
cs = new ArrayList<String>(); //存放显示的字符串
cs.add("专题调研");
cs.add("视察");
cs.add("座谈");
cs.add("走访等其他调研方式");
initList();
}
void initList(){
if (cs == null || cs.size() == 0)
return;
// 清除已经选择的项 ,用于存放当前选择的内容(字符串)
if (beSelectedData.size() > 0) {
beSelectedData.clear();
}
//将选中状态都置为false
if (isSelected != null)
isSelected = null;
isSelected = new HashMap<Integer, Boolean>();
for (int i = 0; i < cs.size(); i++) {
isSelected.put(i, false);
if(i == 0){
isSelected.put(i, true);
beSelectedData.add(cs.get(i));
}
}
adapter = new ListAdapter(this, cs); //设置适配器
listView.setAdapter(adapter);
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
adapter.notifyDataSetChanged(); //提醒适配器跟新界面
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { //listview的点击事件
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Log.i("map", cs.get(position).toString());
}
});
}
class ListAdapter extends BaseAdapter {
private Context context;
private List<String> cs;
private LayoutInflater inflater;
public ListAdapter(Context context, List<String> data) {
this.context = context;
this.cs = data;
inflater = LayoutInflater.from(context);
}
public int getCount() {
return cs.size();
}
public Object getItem(int position) {
return cs.get(position);
}
public long getItemId(int position) {
return 0;
}
public View getView(int position1, View convertView, ViewGroup parent) {
ViewHolder holder = null;
View view = null;
final int position = position1;
//界面重用
if (convertView == null) {
convertView = inflater.inflate(R.layout.list_adapter,null);
holder = new ViewHolder();
holder.checkBox = (CheckBox) convertView
.findViewById(R.id.checkBox);
holder.tv_name = (TextView) convertView
.findViewById(R.id.tv_name);
convertView.setTag(holder);
} else {
view = convertView;
holder = (ViewHolder) view.getTag();
}
//checkBox的点击事件
holder.checkBox.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// 当前点击的CheckBox是否是点击状态
boolean current = !isSelected.get(position);
// 先将所有的置为FALSE
for(Integer p : isSelected.keySet()) {
isSelected.put(p, false);
}
// 再设置当前选择CheckBox的实际状态
isSelected.put(position, current);
ListAdapter.this.notifyDataSetChanged(); //跟新界面
beSelectedData.clear(); //每次点击,都跟新点击的内容
if(current) beSelectedData.add(cs.get(position));
}
});
holder.tv_name.setText(cs.get(position).toString());
holder.checkBox.setChecked(isSelected.get(position));
return convertView;
}
}
class ViewHolder {
CheckBox checkBox;
TextView tv_name;
}
}
ok,结束!