盘点android中的dialog

来源:互联网 发布:vps搭建虚拟专用网络 编辑:程序博客网 时间:2024/05/19 02:43
除了Toast和Notification之外,Dialog也可用于提示用户。
创建dialog需要用到AlertDialog.Builder类,这可以理解为一个对话框的产生器,可以利用这个类创建各种种类的对话框。对话框创建好之后调用此类的create方法即可产生一个对话框,再调用show方法就可以将对话框显示到界面上。
如果对话框用来展示一个进度,可以使用ProgressDialog类来完成(不建议使用,应该用ProgressBar代替)。另外还有两类对话框一个叫DatePickerDialog另一个是TimePickerDialog分别用来选择日期和时间。
除此之外,对话框可以使用DialogFrgament类来包装,但是为了兼容性需要导入v4的包。具体可以看文档。
下面以代码片段的方式总结了一些常用的dialog的使用:
1.最基本的dialog:
显示效果:

代码片段:
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. public void show_alert()  
  2.     {  
  3.         AlertDialog.Builder builder = new Builder(this);  
  4.         builder.setMessage("是否更新");  
  5.         builder.setIcon(R.drawable.ic_launcher);  
  6.         builder.setTitle("提醒");  
  7.         builder.setPositiveButton("确定",new DialogInterface.OnClickListener()  
  8.         {  
  9.               
  10.             @Override  
  11.             public void onClick(DialogInterface dialog, int which)  
  12.             {  
  13.                 Toast.makeText(MainActivity.this,"点击了确定按钮",Toast.LENGTH_SHORT).show();  
  14.             }  
  15.         });  
  16.         builder.setNegativeButton("取消",new DialogInterface.OnClickListener()  
  17.         {  
  18.               
  19.             @Override  
  20.             public void onClick(DialogInterface dialog, int which)  
  21.             {  
  22.                 Toast.makeText(MainActivity.this,"点击了取消按钮",Toast.LENGTH_SHORT).show();  
  23. //                dialog.dismiss();  
  24.             }  
  25.         });  
  26.         builder.show();  
  27.     }  
2.带一个列表的对话框:
    (1).列表数据静态指定(放到数组中):
显示效果:

代码片段:
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. private void show_list()  
  2.     {  
  3.         AlertDialog.Builder builder = new AlertDialog.Builder(this);  
  4.         builder.setTitle("职业");  
  5.         builder.setItems(new String[]{"程序员","工程师","砖家"},new DialogInterface.OnClickListener()  
  6.         {  
  7.             @Override  
  8.             public void onClick(DialogInterface dialog, int which)  
  9.             {  
  10.                 Toast.makeText(MainActivity.this,"点击了"+which,Toast.LENGTH_SHORT).show();  
  11.             }  
  12.         });  
  13.         builder.show();  
  14.     }  
 2).列表数据通过适配器指定
显示效果:

代码片段:
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. public void show_dialog()  
  2.     {  
  3.         /* 这里的数据可以从数据库/网络中动态获取 */  
  4.         List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();  
  5.         Map<String, Object> map1 = new HashMap<String, Object>();  
  6.         map1.put("image", R.drawable.image1);  
  7.         map1.put("text""我是条目1");  
  8.         Map<String, Object> map2 = new HashMap<String, Object>();  
  9.         map2.put("image", R.drawable.image2);  
  10.         map2.put("text""我是条目2");  
  11.         Map<String, Object> map3 = new HashMap<String, Object>();  
  12.         map3.put("image", R.drawable.image3);  
  13.         map3.put("text""我是条目3");  
  14.         data.add(map1);  
  15.         data.add(map2);  
  16.         data.add(map3);  
  17.         SimpleAdapter adapter = new SimpleAdapter(this, data,  
  18.                 R.layout.list_item, new String[]  
  19.                 { "image""text" }, new int[]  
  20.                 { R.id.iv_show, R.id.tv_text });  
  21.         AlertDialog.Builder builder = new AlertDialog.Builder(this);  
  22.         builder.setTitle("从适配器中获取的数据");  
  23.         builder.setAdapter(adapter, new DialogInterface.OnClickListener()  
  24.         {  
  25.             @Override  
  26.             public void onClick(DialogInterface dialog, int which)  
  27.             {  
  28.                 Toast.makeText(MainActivity.this"点击了" + which, 0).show();  
  29.             }  
  30.         });  
  31.         builder.show();  
  32.     }  
3.单选列表对话框
    显示效果:


  代码片段:
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. public void show_single()  
  2.     {  
  3.         AlertDialog.Builder builder = new Builder(this);  
  4.         builder.setIcon(R.drawable.ic_launcher);  
  5.         builder.setTitle("提醒");  
  6.         builder.setSingleChoiceItems(new String[]{"条目1","条目2","条目3"},0,new DialogInterface.OnClickListener()  
  7.         {  
  8.             @Override  
  9.             public void onClick(DialogInterface dialog, int which)//id从0开始  
  10.             {  
  11.                 Toast.makeText(MainActivity.this,"item="+which,Toast.LENGTH_SHORT).show();  
  12.                 dialog.dismiss();  
  13.             }  
  14.         });  
  15.         builder.setNegativeButton("取消",new DialogInterface.OnClickListener()  
  16.         {  
  17.               
  18.             @Override  
  19.             public void onClick(DialogInterface dialog, int which)  
  20.             {  
  21.                 Toast.makeText(MainActivity.this,"点击了取消按钮",Toast.LENGTH_SHORT).show();  
  22.             }  
  23.         });  
  24.         builder.show();  
  25.     }  
4.多选列表对话框:
显示效果:


代码片段:
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. public void show_multiple()  
  2.     {  
  3.         AlertDialog.Builder builder = new Builder(this);  
  4.         builder.setIcon(R.drawable.ic_launcher);  
  5.         builder.setTitle("提醒");  
  6.         builder.setMultiChoiceItems(new String[]{"条目1","条目2","条目3","条目4"}, nullnew DialogInterface.OnMultiChoiceClickListener()  
  7.         {  
  8.             @Override  
  9.             public void onClick(DialogInterface dialog, int which, boolean isChecked)  
  10.             {  
  11.                 Toast.makeText(MainActivity.this,"item"+which+","+isChecked,Toast.LENGTH_SHORT).show();  
  12.             }  
  13.         });  
  14.         builder.setNegativeButton("取消",new DialogInterface.OnClickListener()  
  15.         {  
  16.               
  17.             @Override  
  18.             public void onClick(DialogInterface dialog, int which)  
  19.             {  
  20.                 Toast.makeText(MainActivity.this,"点击了取消按钮",Toast.LENGTH_SHORT).show();  
  21.             }  
  22.         });  
  23.         builder.show();  
  24.     }  
5.自定义对话框:
显示效果:


代码片段:
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. private void show_own_dialog()  
  2.     {  
  3.         AlertDialog.Builder builder = new AlertDialog.Builder(this);  
  4.         LayoutInflater inflater = this.getLayoutInflater();//"充气筒"  
  5.         builder.setView(inflater.inflate(R.layout.dialog, null))  
  6.                 .setPositiveButton("登陆",  
  7.                         new DialogInterface.OnClickListener()  
  8.                         {  
  9.                             @Override  
  10.                             public void onClick(DialogInterface dialog, int id)  
  11.                             {  
  12.                                 Toast.makeText(MainActivity.this"确定"0).show();  
  13.                             }  
  14.                         })  
  15.                 .setNegativeButton("取消",  
  16.                         new DialogInterface.OnClickListener()  
  17.                         {  
  18.                             public void onClick(DialogInterface dialog, int id)  
  19.                             {  
  20.                                 Toast.makeText(MainActivity.this,"取消"0).show();  
  21.                             }  
  22.                         });  
  23.         builder.show();  
  24.     }  

6.带进度条的dialog
显示效果:

代码片段:
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. public void show_circle_progressdialog()  
  2.     {  
  3.         ProgressDialog diaolog = new ProgressDialog(this);  
  4.         diaolog.setIcon(R.drawable.ic_launcher);  
  5.         diaolog.setTitle("提醒");  
  6.         diaolog.setMessage("正在加载");  
  7.         diaolog.show();  
  8.     }  
还有水平进度条:
显示效果:


代码片段:
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. public void show_horizonal()  
  2.     {  
  3.         final ProgressDialog diaolog = new ProgressDialog(this);  
  4.         diaolog.setIcon(R.drawable.ic_launcher);  
  5.         diaolog.setTitle("提醒");  
  6.         diaolog.setMessage("正在加载");  
  7.         diaolog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);  
  8.         diaolog.setMax(100);  
  9.           
  10.         new Thread(new Runnable()  
  11.         {  
  12.             @Override  
  13.             public void run()  
  14.             {  
  15.                 for(int i = 0; i<=100; i++)  
  16.                 {  
  17.                     diaolog.setProgress(i);  
  18.                     try  
  19.                     {  
  20.                         Thread.sleep(30);  
  21.                     } catch (InterruptedException e)  
  22.                     {  
  23.                         e.printStackTrace();  
  24.                     }  
  25.                 }  
  26.                 diaolog.dismiss();  
  27.             }  
  28.         }).start();  
  29.         diaolog.show();  
  30.     }  
7.日期选择与时间选择对话框:
显示效果:


代码片段:
布局:
[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:orientation="vertical"  
  6.     tools:context=".MainActivity" >  
  7.     <DatePicker   
  8.         android:id="@+id/dp"  
  9.         android:layout_width="wrap_content"  
  10.         android:layout_height="wrap_content"  
  11.         />  
  12.     <TimePicker   
  13.         android:id="@+id/tp"  
  14.         android:layout_width="match_parent"  
  15.         android:layout_height="wrap_content"  
  16.         />    
  17. </LinearLayout>  
activity:
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. package com.example.dialogdemo4;  
  2. import android.app.Activity;  
  3. import android.os.Bundle;  
  4. import android.widget.DatePicker;  
  5. import android.widget.Toast;  
  6. import android.widget.DatePicker.OnDateChangedListener;  
  7. import android.widget.TimePicker;  
  8. import android.widget.TimePicker.OnTimeChangedListener;  
  9. public class MainActivity extends Activity  
  10. {  
  11.     private DatePicker dp = null;  
  12.     private TimePicker tp = null;  
  13.     @Override  
  14.     protected void onCreate(Bundle savedInstanceState)  
  15.     {  
  16.         super.onCreate(savedInstanceState);  
  17.         setContentView(R.layout.activity_main);  
  18.           
  19.         dp = (DatePicker) findViewById(R.id.dp);  
  20.         tp = (TimePicker) findViewById(R.id.tp);  
  21.           
  22.         dp.init(201411new OnDateChangedListener()  
  23.         {  
  24.             @Override  
  25.             public void onDateChanged(DatePicker view, int year, int monthOfYear,  
  26.                     int dayOfMonth)  
  27.             {  
  28.                 Toast.makeText(MainActivity.this,"monthOfYear"+monthOfYear+",dayOfMonth"+dayOfMonth, 0).show();  
  29.             }  
  30.         });  
  31.           
  32.         tp.setIs24HourView(true);  
  33.         tp.setOnTimeChangedListener(new OnTimeChangedListener()  
  34.         {  
  35.             @Override  
  36.             public void onTimeChanged(TimePicker view, int hourOfDay, int minute)  
  37.             {  
  38.                 Toast.makeText(MainActivity.this,"hourOfDay"+hourOfDay+",minute"+minute, 0).show();  
  39.             }  
  40.         });        
  41.     }  
  42. }  
0 0