Android开发必知 九种对话框的实现方法
程序员文章站
2024-01-20 20:42:04
在开发过程中,与用户交互式免不了会用到对话框以实现更好的用户体验,所以掌握几种对话框的实现方法还是非常有必要的。在看具体实例之前先对alertdialog做一个简单介绍。a...
在开发过程中,与用户交互式免不了会用到对话框以实现更好的用户体验,所以掌握几种对话框的实现方法还是非常有必要的。在看具体实例之前先对alertdialog做一个简单介绍。alertdialog是功能最丰富、实践应用最广的对话框,它可以生成各种内容的对话框。但实际上alertdialog生成的对话框总体可分为以下4个区域:图标区、标题区、内容区、按钮区。
这里总结了九种对话框的实现方法,有需要的朋友可以来学习下了
除了popupwindow实现稍微麻烦一点,其他形似都相对简单,熟悉2便即可
直接上源码
package com.naoh.stu; import java.util.arraylist; import android.app.activity; import android.app.alertdialog; import android.app.progressdialog; import android.content.dialoginterface; import android.graphics.drawable.bitmapdrawable; import android.os.bundle; import android.view.gravity; import android.view.layoutinflater; import android.view.view; import android.view.view.onclicklistener; import android.view.viewgroup.layoutparams; import android.view.windowmanager; import android.widget.button; import android.widget.edittext; import android.widget.popupwindow; import android.widget.toast; public class diaallactivity extends activity implements runnable { private button btn_dianormal; private button btn_diamulti; private button btn_dialist; private button btn_diasinchos; private button btn_diamultichos; private button btn_diaprocess; private button btn_diareadprocess; private button btn_diacustom; private button btn_popupdia; private popupwindow window=null; private button cuspopupbtn1; private view popupview; @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.dialog); getview(); setlistener(); } private void getview() { btn_dianormal=(button)findviewbyid(r.id.btn_dianormal); btn_diamulti=(button)findviewbyid(r.id.btn_diamulti); btn_dialist=(button)findviewbyid(r.id.btn_dialist); btn_diasinchos=(button)findviewbyid(r.id.btn_diasigchos); btn_diamultichos=(button)findviewbyid(r.id.btn_diamultichos); btn_diaprocess=(button)findviewbyid(r.id.btn_diaprocess); btn_diareadprocess=(button)findviewbyid(r.id.btn_diareadprocess); btn_diacustom=(button)findviewbyid(r.id.btn_diacustom); btn_popupdia=(button)findviewbyid(r.id.btn_popupdia); } private void setlistener() { btn_dianormal.setonclicklistener(btnlistener); btn_diamulti.setonclicklistener(btnlistener); btn_dialist.setonclicklistener(btnlistener); btn_diasinchos.setonclicklistener(btnlistener); btn_diamultichos.setonclicklistener(btnlistener); btn_diaprocess.setonclicklistener(btnlistener); btn_diareadprocess.setonclicklistener(btnlistener); btn_diacustom.setonclicklistener(btnlistener); btn_popupdia.setonclicklistener(btnlistener); } private button.onclicklistener btnlistener= new button.onclicklistener() { public void onclick(view v) { if(v instanceof button) { int btnid=v.getid(); switch(btnid) { case r.id.btn_dianormal: shownormaldia(); break; case r.id.btn_diamulti: showmultidia(); break; case r.id.btn_dialist: showlistdia(); break; case r.id.btn_diasigchos: showsinchosdia(); break; case r.id.btn_diamultichos: showmultichosdia(); break; case r.id.btn_diareadprocess: showreadprocess(); break; case r.id.btn_diaprocess: showprocessdia(); break; case r.id.btn_diacustom: showcustomdia(); break; case r.id.btn_popupdia: showcuspopup(v); break; default: break; } } } }; /*普通的对话框*/ private void shownormaldia() { //alertdialog.builder normaldialog=new alertdialog.builder(getapplicationcontext()); alertdialog.builder normaldia=new alertdialog.builder(diaallactivity.this); normaldia.seticon(r.drawable.ic_launcher); normaldia.settitle("普通的对话框"); normaldia.setmessage("普通对话框的message内容"); normaldia.setpositivebutton("确定", new dialoginterface.onclicklistener() { @override public void onclick(dialoginterface dialog, int which) { // todo auto-generated method stub showclickmessage("确定"); } }); normaldia.setnegativebutton("取消", new dialoginterface.onclicklistener() { @override public void onclick(dialoginterface dialog, int which) { // todo auto-generated method stub showclickmessage("取消"); } }); normaldia.create().show(); } /*多按钮对话框*/ private void showmultidia() { alertdialog.builder multidia=new alertdialog.builder(diaallactivity.this); multidia.settitle("多选项对话框"); multidia.setpositivebutton("按钮一", new dialoginterface.onclicklistener() { @override public void onclick(dialoginterface dialog, int which) { // todo auto-generated method stub showclickmessage("按钮一"); } }); multidia.setneutralbutton("按钮二", new dialoginterface.onclicklistener() { @override public void onclick(dialoginterface dialog, int which) { // todo auto-generated method stub showclickmessage("按钮二"); } }); multidia.setnegativebutton("按钮三", new dialoginterface.onclicklistener() { @override public void onclick(dialoginterface dialog, int which) { // todo auto-generated method stub showclickmessage("按钮三"); } }); multidia.create().show(); } /*列表对话框*/ private void showlistdia() { final string[] mlist={"选项1","选项2","选项3","选项4","选项5","选项6","选项7"}; alertdialog.builder listdia=new alertdialog.builder(diaallactivity.this); listdia.settitle("列表对话框"); listdia.setitems(mlist, new dialoginterface.onclicklistener() { @override public void onclick(dialoginterface dialog, int which) { // todo auto-generated method stub /*下标是从0开始的*/ showclickmessage(mlist[which]); } }); listdia.create().show(); } /*单项选择对话框*/ int yourchose=-1; private void showsinchosdia() { final string[] mlist={"选项1","选项2","选项3","选项4","选项5","选项6","选项7"}; yourchose=-1; alertdialog.builder sinchosdia=new alertdialog.builder(diaallactivity.this); sinchosdia.settitle("单项选择对话框"); sinchosdia.setsinglechoiceitems(mlist, 0, new dialoginterface.onclicklistener() { @override public void onclick(dialoginterface dialog, int which) { // todo auto-generated method stub yourchose=which; } }); sinchosdia.setpositivebutton("确定", new dialoginterface.onclicklistener() { @override public void onclick(dialoginterface dialog, int which) { // todo auto-generated method stub if(yourchose!=-1) { showclickmessage(mlist[yourchose]); } } }); sinchosdia.create().show(); } arraylist<integer> mychose= new arraylist<integer>(); private void showmultichosdia() { final string[] mlist={"选项1","选项2","选项3","选项4","选项5","选项6","选项7"}; final boolean mchosests[]={false,false,false,false,false,false,false}; mychose.clear(); alertdialog.builder multichosdia=new alertdialog.builder(diaallactivity.this); multichosdia.settitle("多项选择对话框"); multichosdia.setmultichoiceitems(mlist, mchosests, new dialoginterface.onmultichoiceclicklistener() { @override public void onclick(dialoginterface dialog, int which, boolean ischecked) { // todo auto-generated method stub if(ischecked) { mychose.add(which); } else { mychose.remove(which); } } }); multichosdia.setpositivebutton("确定", new dialoginterface.onclicklistener() { @override public void onclick(dialoginterface dialog, int which) { // todo auto-generated method stub int size=mychose.size(); string str=""; for(int i=0;i<size;i++) { str+=mlist[mychose.get(i)]; } showclickmessage(str); } }); multichosdia.create().show(); } //进度读取框需要模拟读取 progressdialog mreadprocessdia=null; public final static int max_readprocess = 100; private void showreadprocess() { mreadprocessdia=new progressdialog(diaallactivity.this); mreadprocessdia.setprogress(0); mreadprocessdia.settitle("进度条窗口"); mreadprocessdia.setprogressstyle(progressdialog.style_horizontal); mreadprocessdia.setmax(max_readprocess); mreadprocessdia.show(); new thread(this).start(); } //新开启一个线程,循环的累加,一直到100然后在停止 @override public void run() { int progress= 0; while(progress < max_readprocess) { try { thread.sleep(100); progress++; mreadprocessdia.incrementprogressby(1); } catch (interruptedexception e) { // todo auto-generated catch block e.printstacktrace(); } } //读取完了以后窗口自消失 mreadprocessdia.cancel(); } /*读取中的对话框*/ private void showprocessdia() { progressdialog processdia= new progressdialog(diaallactivity.this); processdia.settitle("进度条框"); processdia.setmessage("内容读取中..."); processdia.setindeterminate(true); processdia.setcancelable(true); processdia.show(); } /*自定义对话框*/ private void showcustomdia() { alertdialog.builder customdia=new alertdialog.builder(diaallactivity.this); final view viewdia=layoutinflater.from(diaallactivity.this).inflate(r.layout.custom_dialog, null); customdia.settitle("自定义对话框"); customdia.setview(viewdia); customdia.setpositivebutton("确定", new dialoginterface.onclicklistener() { @override public void onclick(dialoginterface dialog, int which) { // todo auto-generated method stub edittext diainput=(edittext) viewdia.findviewbyid(r.id.txt_cusdiainput); showclickmessage(diainput.gettext().tostring()); } }); customdia.create().show(); } /*popup window 来实现*/ private void showcuspopup(view parent) { if(window == null) { popupview=layoutinflater.from(diaallactivity.this).inflate(r.layout.dia_cuspopup_dia, null); cuspopupbtn1=(button)popupview.findviewbyid(r.id.diacuspopupsure); window =new popupwindow(popupview,layoutparams.fill_parent,layoutparams.fill_parent); } window.setanimationstyle(r.style.popupanimation); /*必须调用setbackgrounddrawable, 因为popupwindow在初始时,会检测background是否为null,如果是ontouch or onkey events就不会相应,所以必须设置background*/ /*网上也有很多人说,弹出pop之后,不响应键盘事件了,这个其实是焦点在pop里面的view去了。*/ window.setfocusable(true); window.setbackgrounddrawable(new bitmapdrawable()); window.update(); window.showatlocation(parent, gravity.center_vertical, 0, 0); cuspopupbtn1.setonclicklistener(new onclicklistener() { @override public void onclick(view v) { // todo auto-generated method stub showclickmessage("popup window的确定"); } }); } /*显示点击的内容*/ private void showclickmessage(string message) { toast.maketext(diaallactivity.this, "你选择的是: "+message, toast.length_short).show(); } }
布局,就是一堆的button
<?xml version="1.0" encoding="utf-8"?> <linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <textview android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="各种dialog合集" /> <button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="普通dialog" android:id="@+id/btn_dianormal"/> <button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="多按钮dialog" android:id="@+id/btn_diamulti"/> <button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="列表dialog" android:id="@+id/btn_dialist"/> <button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="单项选择dialog" android:id="@+id/btn_diasigchos"/> <button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="多项选择dialog" android:id="@+id/btn_diamultichos"/> <button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="进度条dialog" android:id="@+id/btn_diareadprocess"/> <button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="读取中dialog" android:id="@+id/btn_diaprocess"/> <button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="自定义dialog" android:id="@+id/btn_diacustom"/> <button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="popupwindow实现的dialog" android:id="@+id/btn_popupdia"/> </linearlayout>
以上是android开发必知 九种对话框的实现方法,代码主要用alertdialog生成的对话框,它的功能丰富、使用最广。
上一篇: js 操作 cookie
下一篇: MySQL索引