Android使用RadioButton结合ListView显示对话框单选按钮列表
16lz
2021-01-26
Android使用RadioButton结合ListView显示对话框单选按钮列表
有时候对话框的单选按钮列表不能满足我们的的设计需求,因为有时候按钮右边不一定是文字,有可能是文件加图片,或多个文字字段的一行内容,这时我们就需要自定义来解决了。
普通单选的效果:
自定义的效果:
本文中介绍的示例效果:
自定义的单选列表数据设计是由ListView的条目构成的,一行数据可以设计成很复杂的内容,比如多张图片或分行显示等等。
设计思想:ListView里面的条目布局左边(或者可以在右边)放一个RadioButton控件,右边设计放文本或图片,可以多个。
还有一个有点复杂的设计的是要判断每一行只有一个RadioButton能被选中,其实是在点击的时候先把每一行的按钮的属性设置为不被选中,然后再把点击的那个按钮的属性设置为选中,这样每次就能保证不会有两个RadioButton被选中。
贴一下主要代码:
(一)ListView的条目的布局设计代码
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="80dp" android:paddingBottom="10dp" android:paddingTop="10dp" > <RadioButton android:id="@+id/rb" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" /> <TextView android:id="@+id/tv_info" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:text="info" android:textSize="25sp" /> <ImageView android:id="@+id/iv_picture" android:layout_width="100dp" android:layout_height="match_parent" android:scaleType="center" />LinearLayout>
(二)Adapter类中判断所有行只能有一行的RadioButton按钮被选中。
//用于记录每个RadioButton的状态,并保证只可选一个 public HashMap states = new HashMap(); //在这里要做判断保证只有一个RadioButton被选中 //当RadioButton被选中时,将其状态记录进States中,并更新其他RadioButton的状态使它们不被选中 viewHolder.rb.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //把所有的按钮的状态设置为没选中 for (int i = 0; i < getCount(); i++) { states.put(i, false); } //然后设置点击的那个按钮设置状态为选中 states.put(position, true); //这样所有的条目中只有一个被选中! notifyDataSetChanged();//刷新适配器 } }); //上面是点击后设置状态,但是也是需要设置显示样式,通过判断状态设置显示的样式 if (states.get((Integer) position) == null || states.get((Integer) position) == false) { //true说明没有被选中 viewHolder.rb.setChecked(false); } else { viewHolder.rb.setChecked(true); }
三.显示对话框方法的代码
// 使用对话框内的控件来关闭对话框 private void getSignatureDialog() { // View final View view = View.inflate(this, R.layout.dialog_signature, null); ListView lv_signature = (ListView) view.findViewById(R.id.lv_signature); Button btn_yes = (Button) view.findViewById(R.id.btn_yes); Button btn_no = (Button) view.findViewById(R.id.btn_no); final View listviewLayout = View.inflate(this, R.layout.dialog_signature, null); //List List signatureList = new ArrayList(); final String[] info = {"张三", "李四", "王五", "赵六"}; final int[] pictureID = {R.drawable.ic_launcher, R.drawable.sig, R.drawable.signature, R.drawable.sort1}; for (int i = 0; i < info.length; i++) { signatureList.add(new SignatureBean(info[i], pictureID[i])); } //adapter final SignatureAdapter adapter = new SignatureAdapter(this, signatureList); lv_signature.setAdapter(adapter); // 创建对话框对象 final AlertDialog dialog = new AlertDialog.Builder(this). // 设置标题// setTitle("通过按钮关闭对话框"). // 添加输入的文本框 setView(view). // 产生 create(); // 设置对话框不可以关闭,一般情况下对话框是失去焦点后自动消失的 // 但是加 了.setCancelable(false),对话框就不会消失,除非手动退出 dialog.setCancelable(false); // 显示 dialog.show(); //设置View内的点击事件 btn_yes.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) {// Toast.makeText(MyActivity.this, "点击了确定", Toast.LENGTH_SHORT).show(); for (int i = 0; i < info.length; i++) { if (adapter.states.get(i) != null && (adapter.states.get(i))) { imageView.setImageResource(pictureID[i]); } } dialog.dismiss(); } }); btn_no.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 点击后关闭对话框,两种方法都可以 // dialog.cancel(); dialog.dismiss();// Toast.makeText(MyActivity.this, "点击了取消", Toast.LENGTH_SHORT).show(); } }); }
其他的代码大家可以思考一下,这里也提供一下我的源代码:
http://download.csdn.net/detail/wenzhi20102321/9820636
如果你的页面有多个对话框最好统一一下颜色,系统的对话框标题字体颜色是:#33B5E5,标题下面那条横线的颜色也是这个。
当然这个UI界面如果要用到程序中是需要设计好看一一点的,比如字体的颜色大小,按钮的背景选择等等设置,我这里只是我开发项目测试的一个小Demo,很多数据要和项目主题对应,需要自己慢慢改。
对于android对话框的使用总结,我之前也是有个详细的总结,包括各种列表的对话框,各种进度条的对话框,各种时间、日期选中的对话框的使用都有,大家可以借鉴。
http://blog.csdn.net/wenzhi20102321/article/details/52818351
共勉:再艰难的时刻总有过去的时候。
更多相关文章
- Android的自定义图片按钮ImageButton【第一篇】
- android button 背景样式
- 【Android企业级开发案例分享】仿西瓜视频主页面框架,自定义GridL
- Android(安卓)CheckBox 修改选择框
- 【Android】ColorPickerDialog 自定义颜色选择器的实现
- [Android] 仿照 Last App Switcher 写的小程序
- Android优雅地处理按钮重复点击
- 自定义Android带图片的按钮
- android如何实现注销功能