Android对话框Dialog的基本用法

AlertDialog的基本用法总结如下:

1.实例化dialog

    由于AlertDialog的构造函数的关系,不能直接实例化,需要利用Builder来实例化,如

    AlertDialog ad=new AlertDialog.Builder(Main.this).create();

2.设置对话框

    设置除了指基本设置如title,messages,icon外,还指设置对话框的按钮,单选框,列表,复选框等。

3.show

    显示对话框。

下面的代码片段展现了各种设置的用法:

1.确定和取消按钮


//确定和取消按钮
		b1=(Button)findViewById(R.id.btn1);
		b1.setOnClickListener(new View.OnClickListener() {
			
			@SuppressWarnings("deprecation")
			@Override
			public void onClick(View v) {
				AlertDialog ad=new AlertDialog.Builder(MainActivity.this).create();
				ad.setTitle("标题1");
				ad.setIcon(R.drawable.ic_launcher);
				ad.setMessage("我是消息内容");
				ad.setButton("确定", new DialogInterface.OnClickListener() {
					
					@Override
					public void onClick(DialogInterface dialog, int which) {
						
						
					}
				});
                ad.setButton2("取消", new DialogInterface.OnClickListener() {
					
					@Override
					public void onClick(DialogInterface dialog, int which) {
						
						
					}
				});
			    ad.show();
			}
		});




2.动态创建对话框

                //动态创建
		b3=(Button)findViewById(R.id.btn3);
		b3.setOnClickListener(new View.OnClickListener() {
			
			@SuppressWarnings("deprecation")
			@Override
			public void onClick(View v) {
				//创建布局
				LayoutInflater inflater=MainActivity.this.getLayoutInflater();
				View twoEditText=inflater.inflate(R.layout.twoedittext, null);
				//Activity.findViewById最终还是会调用View.findViewById
				//因为在Activity的onCreate中一定会先setContentView的
				final EditText e1=(EditText)twoEditText.findViewById(R.id.e1);
				final EditText e2=(EditText)twoEditText.findViewById(R.id.e2);
				e1.setText("e1");
				e2.setText("e2");
				//创建对话框
				AlertDialog ad=new AlertDialog.Builder(MainActivity.this).create();
				ad.setView(twoEditText);//将view填充至对话框中
				ad.setTitle("标题1");
				ad.setIcon(R.drawable.ic_launcher);
				ad.setMessage("动态创建的内容!");
				ad.setButton("取值", new DialogInterface.OnClickListener() {			
					@Override
					public void onClick(DialogInterface dialog, int which) {
						Log.v("tag",e1.getText().toString()+e2.getText());
						
					}
				});
				ad.show();
				
			}
		});

这里将布局文件对应的View动态的加载至对话框中了(布局文件已提前建立了2个EditText),功能有扩展性。

3.单选列表

                //单选框
		b4=(Button)findViewById(R.id.btn4);
		b4.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				final String[] s={"a","b","c","d"};
				AlertDialog ad=new AlertDialog.Builder(MainActivity.this).
						setSingleChoiceItems(s, 1, new DialogInterface.OnClickListener() {
							
							@Override
							public void onClick(DialogInterface dialog, int which) {
								Log.v("tag", "您选中了"+s[which]);
								dialog.dismiss();
								
							}
						}).create();
				ad.show();
				
			}
		});
加入单选列表、复选等列表时,需要在builder后面调用setXXXX方法后再create的,一旦create后的实例对象是没有对应的setXXXX的方法的。

4.复选列表

                //复选框
		b5=(Button)findViewById(R.id.btn5);
		b5.setOnClickListener(new View.OnClickListener() {
			
			@SuppressWarnings("deprecation")
			@Override
			public void onClick(View v) {
				final String[] s={"a","b","c","d"};
				final AlertDialog ad=new AlertDialog.Builder(MainActivity.this)
				.setMultiChoiceItems(s, null, new OnMultiChoiceClickListener(){

					@Override
					public void onClick(DialogInterface dialog, int which,
							boolean isChecked) {
						Log.v("tag", "选中了第"+which+",值为"+isChecked);
						
					}
					
				}).create();
				//全选
				final boolean[] bArray=new boolean[]{true,false,true,true};
				ad.setButton("全选", new DialogInterface.OnClickListener() {
					
					@Override
					public void onClick(DialogInterface dialog, int which) {
						ListView lv=ad.getListView();
						for(int i=0;i<lv.getCount();i++){
							lv.setItemChecked(i, true);
						}
						try{
							Field f=ad.getClass().getSuperclass().getDeclaredField("mShowing");
							f.setAccessible(true);
							f.set(ad, false);
						}
						catch(Exception e){
							
						}
					}
				});
//反选
ad.setButton2("反选", new DialogInterface.OnClickListener() {
					
					@Override
					public void onClick(DialogInterface dialog, int which) {
						SparseBooleanArray sb=ad.getListView().getCheckedItemPositions();
						ListView lv=ad.getListView();
						for(int i=0;i<lv.getCount();i++){
							lv.setItemChecked(i, !sb.get(i));
						}
						try{
							Field f=ad.getClass().getSuperclass().getDeclaredField("mShowing");
							f.setAccessible(true);
							f.set(ad, false);
						}
						catch(Exception e){
							
						}
					}
				});
  //取值
ad.setButton3("确定", new DialogInterface.OnClickListener() {
					
					@Override
					public void onClick(DialogInterface dialog, int which) {
						
						ListView lv=ad.getListView();
						for(int i=0;i<lv.getCount();i++){
							Log.v("tag","id:"+lv.getAdapter().getItemId(i)+"item:"+lv.getAdapter().getItem(i));
						}
						try{
							Field f=ad.getClass().getSuperclass().getDeclaredField("mShowing");
							f.setAccessible(true);
							f.set(ad, true);
							ad.dismiss();
						}
						catch(Exception e){
							
						}
						
					}
					
				});
                                ad.show();
				//一定要show完之后在初始化
				for(int i=0;i<bArray.length;i++){
					ad.getListView().setItemChecked(i, bArray[i]);
				}
			}
		});
由于dialog默认是会dismiss掉的,但对于复选来说,只用待用户筛选完多个选项点击确认后才可消失。所以利用反射强行让其不消失:

Field f=ad.getClass().getSuperclass().getDeclaredField("mShowing");
							f.setAccessible(true);
							f.set(ad, false);//false不消失,true消失
5.一般列表

        //普通列表
		b6=(Button)findViewById(R.id.btn6);
		b6.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				final String[] s={"q","w","s","d"};
				AlertDialog ad=new AlertDialog.Builder(MainActivity.this)
				.setItems(s, new DialogInterface.OnClickListener() {
					
					@Override
					public void onClick(DialogInterface dialog, int which) {
						Log.v("tag", "您选中了"+s[which]);
						dialog.dismiss();
						
					}
				}).create();
				ad.show();
			}
			
		});


代码下载http://download.csdn.net/detail/kkkkkxiaofei/6690817



























评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值