Builder设计模式

    

Android之Builder对话框的一些常用方式

    Android为我们提供几种对话框,主要有:AlertDialog、ProgressDialog、DataPickerDialog、TimePickerDialog。

    AlertDialog,是具有0-3个按钮,还可以可以放置选项、复选框单选框或自定义布局等,以达到与用户交互的效果。

    AlertDialog中 最常用的莫过于Builder对话框。下面,列举出它常用的几种方式:1.简单的Builder;2.带控件的Builder;3.自定义布局的Builder;4.嵌套的Builder

    1)简单的Builder

         

     

[java]
new AlertDialog.Builder(AlertDialog_Builder.this)   //Content上下文   
  1. .setIcon(android.R.drawable.ic_dialog_alert)        //图标,android.R开头表示Android提供的资源库   
  2. .setTitle("简单的Builder:显示文本内容")              //标题   
  3. .setMessage(et_show.getText())                      //要显示的内容   
  4. .show();                                            //显示  

 

 

    2)带控件的Builder

       

    

[java:firstline[1]]
final CharSequence[] items ={"Black""Red""Blue""Yellow"};  
  1. final int[] color = {Color.BLACK, Color.RED, Color.BLUE, Color.YELLOW};  
  2. final StringBuffer selectedItem = new StringBuffer("0");  
  3. new AlertDialog.Builder(AlertDialog_Builder.this)  
  4. .setIcon(android.R.drawable.ic_dialog_info)  
  5. .setTitle("带Button的Builder:显示文本内容")  
  6. //.setMessage(et_show.getText())   
  7. .setSingleChoiceItems(items, 0new DialogInterface.OnClickListener() {  
  8.   
  9. @Override  
  10. public void onClick(DialogInterface dialog, int which) {  
  11. // TODO Auto-generated method stub   
  12. selectedItem.delete(0, selectedItem.length()-1);  
  13. selectedItem.append(which);  
  14. }  
  15.   
  16. })  
  17. .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {//添加一个Button并注册其响应事件   
  18. @Override  
  19. public void onClick(DialogInterface dialog, int which) {  
  20. // TODO Auto-generated method stub   
  21. int colorID = Integer.parseInt(selectedItem.toString());  
  22. et_show.setBackgroundColor(color[colorID]);  
  23. }  
  24.   
  25. })  
  26. .setNegativeButton("清除"new DialogInterface.OnClickListener() {    //注意,这个是SetNegativeButton,上面那个是SetPositiveButton   
  27. //不能重复名字,否则最后那个会覆盖前面那个,也就是说每个Buttion只显示一个。   
  28. @Override  
  29. public void onClick(DialogInterface dialog, int which) {  
  30. // TODO Auto-generated method stub   
  31. et_show.setText("");  
  32. }  
  33. })  
  34. .setNeutralButton("取消"new DialogInterface.OnClickListener() {  
  35.   
  36. @Override  
  37. public void onClick(DialogInterface dialog, int which) {  
  38. // TODO Auto-generated method stub   
  39. dialog.cancel();  
  40. }  
  41. })  
  42. .show();  

 

    3)自定义布局的Builder

       

    a.代码

   

[java:firstline[1]] final LayoutInflater layout = LayoutInflater.from(AlertDialog_Builder.this);    //用于获取,要使用final修饰   
  1. final View customView = layout.inflate(R.layout.alter_text, null);          //创建自定义的View,要使用final修饰   
  2. new AlertDialog.Builder(AlertDialog_Builder.this)  
  3. .setIcon(android.R.drawable.ic_dialog_info)  
  4. .setTitle("自定义的Builder:修改文本内容")  
  5. .setView(customView)        //添加自定义视图   
  6. .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {//添加一个Button并注册其响应事件   
  7. @Override  
  8. public void onClick(DialogInterface dialog, int which) {  
  9. // TODO Auto-generated method stub   
  10. EditText et_alteredText = (EditText)customView.findViewById(R.id.et_alteredText); //获取自定义View里面的EditText   
  11. et_show.setText(et_alteredText.getText().toString());  
  12. }  
  13.   
  14. })  
  15. .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { //注意,这个是SetNegativeButton,上面那个是SetPositiveButton   
  16. //不能重复名字,否则最后那个会覆盖前面那个,也就是说每个Buttion只显示一个。   
  17. @Override  
  18. public void onClick(DialogInterface dialog, int which) {  
  19. // TODO Auto-generated method stub   
  20. dialog.cancel();  
  21. }  
  22. })  
  23. .show();  

 

    b.布局文件alter_text.xml

   

[xhtml] <?xml version="1.0" encoding="utf-8"?>  
  1. <AbsoluteLayout  
  2. android:id="@+id/widget1"  
  3. android:layout_width="fill_parent"  
  4. android:layout_height="fill_parent"  
  5. xmlns:android="http://schemas.android.com/apk/res/android"  
  6. >  
  7. <EditText  
  8. android:id="@+id/et_alteredText"  
  9. android:layout_width="fill_parent"  
  10. android:layout_height="wrap_content"  
  11. android:textSize="18sp"  
  12. android:layout_x="0px"  
  13. android:layout_y="22px"  
  14. >  
  15. </EditText>  
  16. </AbsoluteLayout>  

 

    4)嵌套的Builder

      

    

[java] final LayoutInflater layout2 = LayoutInflater.from(AlertDialog_Builder.this);   //用于获取XML工厂,要使用final修饰   
  1. final View customView2 = layout2.inflate(R.layout.alter_text, null);            //创建自定义的View,要使用final修饰   
  2. new AlertDialog.Builder(AlertDialog_Builder.this)  
  3. .setIcon(android.R.drawable.ic_dialog_info)  
  4. .setTitle("嵌套的Builder:显示文本内容")  
  5. .setMessage(et_show.getText())  
  6. .setPositiveButton(R.string.rename, new DialogInterface.OnClickListener() {//添加一个Button并注册其响应事件   
  7. @Override  
  8. public void onClick(DialogInterface dialog, int which) {  
  9. // TODO Auto-generated method stub   
  10. new AlertDialog.Builder(AlertDialog_Builder.this)  
  11. .setIcon(android.R.drawable.ic_dialog_info)  
  12. .setTitle("嵌套的Builder:修改文本内容")  
  13. .setView(customView2)       //添加自定义视图   
  14. .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {//添加一个Button并注册其响应事件   
  15. @Override  
  16. public void onClick(DialogInterface dialog, int which) {  
  17. // TODO Auto-generated method stub   
  18. EditText et_alteredText = (EditText)customView2.findViewById(R.id.et_alteredText); //获取自定义View里面的EditText   
  19. et_show.setText(et_alteredText.getText().toString());  
  20. }  
  21.   
  22. })  
  23. .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { //注意,这个是SetNegativeButton,上面那个是SetPositiveButton   
  24. //不能重复名字,否则最后那个会覆盖前面那个,也就是说每个Buttion只显示一个。   
  25. @Override  
  26. public void onClick(DialogInterface dialog, int which) {  
  27. // TODO Auto-generated method stub   
  28. dialog.cancel();  
  29. }  
  30. })  
  31. .show();  
  32. }  
  33.   
  34. })  
  35. .setNegativeButton("取消"new DialogInterface.OnClickListener() {    //注意,这个是SetNegativeButton,上面那个是SetPositiveButton   
  36. //不能重复名字,否则最后那个会覆盖前面那个,也就是说每个Buttion只显示一个。   
  37. @Override  
  38. public void onClick(DialogInterface dialog, int which) {  
  39. // TODO Auto-generated method stub   
  40. et_show.setText("");  
  41. }  
  42. })  
  43. .show();  

posted on 2012-03-31 11:07  lizhen-cswb  阅读(490)  评论(0编辑  收藏  举报

导航