android自定义模拟勾选框
来源:互联网 发布:济南华育软件 编辑:程序博客网 时间:2024/05/03 15:21
android是默认是有CheckBox的,但是这种定死的多选框太难看了。
要想让其变得好看的话就需要重写其中的方法,但是重写原方法的文章我搜到的比较少,加上时间比较紧张了,所以就来不及去研究那些源码了。
所以就自己利用ImageButton做了一个类似的,这并不是真正意义上的多选框,但是实现了多选框的功能。感觉效果还不错。
至于原理很简单:
每一个选项就是一个LinearLayout
每个LinearLayout里面包含一个TextView和一个ImageButton,而我们只需要对ImageButton添加监听就可以了。
代码如下:
public class SetRMPLDialog extends RelativeLayout{private Context parentContext;private android.view.ViewGroup.LayoutParams lp;/**布局*/private TextView showtitle;private int showtitleid=41310;private RelativeLayout allitem;private int allitemid=41320;private Map<Integer,OneItem> itemmap;private Button okBtn;private Button exitBtn;private PitchListen pitchlisten;//对按钮的监听private BtnListen btnlisten;//对确定和退出按钮的监听public SetRMPLDialog(Context context) {super(context);this.parentContext=context;pitchlisten=new PitchListen();btnlisten=new BtnListen();init();}private void init() {showtitle=new TextView(parentContext);showtitle.setText("请选择屏蔽号码的位数");showtitle.setId(showtitleid);LayoutParams lpshowtitle=new LayoutParams(-2,-2);lpshowtitle.addRule(RelativeLayout.ALIGN_PARENT_TOP);lpshowtitle.addRule(RelativeLayout.CENTER_HORIZONTAL);allitem=new RelativeLayout(parentContext);allitem.setId(allitemid);LayoutParams lpallitem=new LayoutParams(-2,200);lpallitem.addRule(RelativeLayout.BELOW,showtitleid);itemmap=new HashMap<Integer, SetRMPLDialog.OneItem>();//创建显示列表createItem();okBtn=new Button(parentContext);okBtn.setText("确定");LayoutParams lpokBtn=new LayoutParams(-2,-2);lpokBtn.setMargins(20, 0, 0, 0);lpokBtn.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);lpokBtn.addRule(RelativeLayout.ALIGN_PARENT_LEFT);exitBtn=new Button(parentContext);exitBtn.setText("退出");LayoutParams lpexitBtn=new LayoutParams(-2,-2);lpexitBtn.setMargins(0, 0, 20, 0);lpexitBtn.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);lpexitBtn.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);addView(showtitle,lpshowtitle);addView(allitem,lpallitem);addView(okBtn,lpokBtn);addView(exitBtn,lpexitBtn);}public void createItem(){for(int i=5;i<=13;i++){OneItem oneitem=new OneItem(parentContext, i);allitem.addView(oneitem,oneitem.getLpitem());itemmap.put(oneitem.getI(), oneitem);}}public android.view.ViewGroup.LayoutParams getLp() {lp=new android.view.ViewGroup.LayoutParams(-1,300);return lp;}class OneItem extends LinearLayout{int i;TextView text;ImageButton sel;android.widget.RelativeLayout.LayoutParams lpitem;public OneItem(Context context,int i) {super(context);this.i=i;text=new TextView(parentContext);text.setText((i!=13)?i+"位:":"13+"+"位:");LayoutParams lptext=new LayoutParams(70,40);lptext.setMargins(0, 5, 0, 5);sel=new ImageButton(parentContext);//添加图片选择资源sel.setBackgroundResource(R.drawable.nopitch);LayoutParams lpsel=new LayoutParams(40,40);lpsel.setMargins(5, 5, 5, 5);addView(text,lptext);addView(sel,lpsel);//添加测试的背景颜色this.setBackgroundColor(Color.CYAN);//对选项按钮添加监听sel.setOnClickListener(pitchlisten);}public android.widget.RelativeLayout.LayoutParams getLpitem(){lpitem=new android.widget.RelativeLayout.LayoutParams(120,50);switch (i%3) {case 0://6.9.12lpitem.addRule(RelativeLayout.CENTER_HORIZONTAL);break;case 1://7,10,13lpitem.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);break;default://5,8,11lpitem.addRule(RelativeLayout.ALIGN_PARENT_LEFT);break;}switch ((i-5)/3) {case 0:lpitem.addRule(RelativeLayout.ALIGN_PARENT_TOP);break;case 1:lpitem.addRule(RelativeLayout.CENTER_VERTICAL);break;default:lpitem.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);break;}return lpitem;}public int getI() {return i;}public void setI(int i) {this.i = i;}public TextView getText() {return text;}public void setText(TextView text) {this.text = text;}public ImageButton getSel() {return sel;}public void setSel(ImageButton sel) {this.sel = sel;}}class PitchListen implements OnClickListener {@Overridepublic void onClick(View v) {Set<Integer> pitchSet = DBHelper.getPitchSet();if (v instanceof ImageButton) {ImageButton sel = (ImageButton) v;OneItem oneitem = (OneItem) sel.getParent();int i=oneitem.getI();Log.i("tag", "选择了"+i+"号按钮");if(pitchSet.contains(i)){oneitem.getSel().setBackgroundResource(R.drawable.nopitch);pitchSet.remove(i);}else{oneitem.getSel().setBackgroundResource(R.drawable.pitch);pitchSet.add(i);}}}}class BtnListen implements OnClickListener{@Overridepublic void onClick(View v) {// TODO Auto-generated method stubif(v==okBtn){Log.i("tag", "okBtn");}else if(v==exitBtn){Log.i("tag", "exitBtn");}else{Log.e("error", this.toString()+"监听按钮出异常了");}}}}
- android自定义模拟勾选框
- android自定义模拟勾选框
- Android 自定义模拟时钟控件
- android自定义View模拟心电图
- android 自定义View模拟时钟
- 自定义Button模拟ToggleButton功能,android
- Android 自定义Button 模拟back事件
- android:模拟水波效果的自定义View
- Android:自定义View示例(模拟TextView)
- Android自定义View---模拟球形动态加速球
- Android通过Window获取View&模拟点击&自定义Toast
- Android自定义View:如何实现一个模拟时钟?
- Android自定义ViewPager(一)——自定义Scroller模拟动画过程
- mui 模拟自定义事件
- android 自定义webview 如何使用gps 如何用模拟的gps
- android自定义View的研究——模拟真实按钮例子
- 【视图控件篇】自定义Android控件之IOS滑动开关模拟详解
- 自定义View很简单 - Android翻页效果原理实现之模拟扭曲
- DirectShow系统概述
- Linq的简单介绍
- BOOST网络库-ASIO
- 虚拟机技术的分类与比较
- 顺序容器之list
- android自定义模拟勾选框
- 发布一个打飞机游戏
- 利用Semaphore实现多线程的一个例子
- 二进制补码范围简单总结
- 关于 firefox Services.addons.mozilla.org , 443使用了无效的安全证书
- 转载:PostgreSQL学习手册(七) 事物隔离
- ORALCE如何update两个表的数据
- 文件存储 DOM操作
- Ubuntu下设置Android SDK环境变量