AndroidAPI提供了Dialog对话框控件,但google明确指出不建议开发者只是使用Dialog来创建对话框,而应该自定义对话框或者使用API中提供的Dialog的子类,如AlertDialog。接下来记录下AlertDialog的具体使用,供广大初学者学习,也供自己日后查阅。
首先在资源文件xml中写入一个按钮。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="警告对话框" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/button1" android:layout_alignRight="@+id/button1" android:layout_below="@+id/button1" android:layout_marginTop="17dp" android:text="选择" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/button2" android:layout_alignRight="@+id/button2" android:layout_below="@+id/button2" android:layout_marginTop="23dp" android:text="单选对话框" /> </RelativeLayout>
在activity中,声明全局变量AlertDialog窗口对象建造者AlertDialog.Builder builder,并在onCreate方法中实例化这个窗口对象建造者new AlertDialog.Builder(this)。
API对该对象提供了相当丰富的方法。
如:builder.setTitile("设置窗口标题");
bulder.setMessage("设置窗口内容");
builder.setIcon("设置窗口图标");
......
为窗口创建建造者注册相关按钮:
“取消”,“确定”,“忽略”等相关按钮,由于是学习当中,按钮的监听事件只是做了简单的吐司处理,在正常开发中是要进行业务逻辑处理的。
1 //通过窗口对象建造者注册“确定”按钮,通过DialogInterface接口注册点击事件 2 builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { 3 4 @Override 5 public void onClick(DialogInterface dialog, int which) { 6 // TODO Auto-generated method stub 7 //完成业务逻辑代码的编写 8 Toast.makeText(MainActivity.this, "确定删除!", 1).show(); 9 } 10 }); 11 //通过窗口对象建造者注册“取消”按钮,通过DialogInterface接口注册点击事件 12 builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { 13 @Override 14 public void onClick(DialogInterface dialog, int which) { 15 // TODO Auto-generated method stub 16 Toast.makeText(MainActivity.this, "取消操作!", 1).show(); 17 } 18 }); 19 //通过窗口对象建造者注册“忽略”按钮,通过DialogInterface接口注册点击事件 20 builder.setNeutralButton("忽略", new DialogInterface.OnClickListener() { 21 @Override 22 public void onClick(DialogInterface dialog, int which) { 23 // TODO Auto-generated method stub 24 Toast.makeText(MainActivity.this, "忽略操作!", 1).show(); 25 } 26 }); 27 button.setOnClickListener(new OnClickListener() { 28 @Override 29 public void onClick(View view) { 30 // TODO Auto-generated method stub 31 // Toast.makeText(MainActivity.this, "谁让你点击的?逗", 1).show(); 32 //窗口构建完毕后,展示窗口 33 builder.show(); 34 } 35 });
通过按钮注册点击事件,在点击事件中,初始化并实例化窗口对象创建者:AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 之后的操作创建简单对话框基本一致。
1 button2.setOnClickListener(new OnClickListener() { 2 @Override 3 public void onClick(View v) { 4 // TODO Auto-generated method stub 5 AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 6 builder.setTitle("选择爱好"); 7 final String[] hobby = {"上网","聊天","打游戏"} ; 8 builder.setMultiChoiceItems(hobby, new boolean[]{true,false,true}, new DialogInterface.OnMultiChoiceClickListener() { 9 @Override 10 public void onClick(DialogInterface dialog, int which, boolean isChecked) { 11 // TODO Auto-generated method stub 12 if(isChecked){ 13 Toast.makeText(MainActivity.this, "选择---->"+hobby[which], 1).show(); 14 }else{ 15 Toast.makeText(MainActivity.this, "取消---->"+hobby[which], 1).show(); 16 } 17 } 18 }); 19 builder.setPositiveButton("确认", new DialogInterface.OnClickListener() { 20 @Override 21 public void onClick(DialogInterface dialog, int which) { 22 // TODO Auto-generated method stub 23 } 24 }); 25 builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { 26 @Override 27 public void onClick(DialogInterface dialog, int which) { 28 // TODO Auto-generated method stub 29 } 30 }); 31 //窗口构建完毕后,展示窗口 32 builder.show(); 33 } 34 });
通过按钮注册点击事件,在点击事件中,初始化并实例化窗口对象创建者:AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 之后的操作跟创建多选窗口基本一致。
1 button3.setOnClickListener(new OnClickListener() { 2 @Override 3 public void onClick(View v) { 4 // TODO Auto-generated method stub 5 AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 6 builder.setTitle("选择爱好"); 7 final String[] hobby = {"上网","聊天","打游戏"} ; 8 //窗口对象创建者可以放adapter容器 9 // builder.setAdapter(adapter, listener); 10 //为窗口对象建造者创建供选择的列表,若未选择任何一项,参数是 : -1 11 builder.setSingleChoiceItems(new String[]{"上网","聊天","打游戏"}, 12 -1,new DialogInterface.OnClickListener() { 13 @Override 14 public void onClick(DialogInterface dialog, int which) { 15 Toast.makeText(MainActivity.this, "您选择了--》"+hobby[which], 1).show(); 16 } 17 }); 18 //通过窗口对象建造者注册“确定”按钮,通过DialogInterface接口注册点击事件 19 builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { 20 @Override 21 public void onClick(DialogInterface dialog, int which) { 22 23 } 24 }); 25 //通过窗口对象建造者注册“忽略”按钮,通过DialogInterface接口注册点击事件 26 builder.setNeutralButton("忽略", new DialogInterface.OnClickListener() { 27 @Override 28 public void onClick(DialogInterface dialog, int which) { 29 30 } 31 }); 32 //通过窗口对象建造者注册“取消”按钮,通过DialogInterface接口注册点击事件 33 builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { 34 @Override 35 public void onClick(DialogInterface dialog, int which) { 36 37 } 38 }); 39 //窗口完毕后,对窗口进行展示 40 builder.show(); 41 } 42 });