Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android學習日記27--Dialog使用及其設計模式

android學習日記27--Dialog使用及其設計模式

編輯:關於Android編程

1、Dialog概述   對話框一般是一個出現在當前Activity之上的一個小窗口,處於下面的Activity失去焦點, 對話框接受所有的用戶交互。 對話框一般用於提示信息和與當前應用程序直接相關的小功能。   2、Dialog 分類:   警告對話框 AlertDialog : 一個可以有0到3個按鈕, 一個單選框或復選框的列表的對話框. 警告對話框可以創建大多數的交互界面, 是推薦的類型。   進度對話框 ProgressDialog: 顯示一個進度環或者一個進度條. 由於它是 AlertDialog 的擴展, 所以它也支持按鈕。   日期選擇對話框 ProgressDialog : 讓用戶選擇一個日期。   時間選擇對話框 TimePickerDialog : 讓用戶選擇一個時間。   3、Dialog應用   a、AlertDialog一般用法:     取得創建者的類,AlertDialog.Builder builder = new Builder(Context);然後通過builder.setXX一系列方法來設置屬性;   最後builder.create().show()來顯示Dialog。     b、ProgressDialog、ProgressDialog、TimePickerDialog 用法:       有些區別,是直接 new XXDialog(Context); 然後通過實例化的dialog.setXX設置屬性;最後直接dialog.show()展示。     c、代碼實例     實現如下9中Dialog          按鈕就不一一點進去演示,直接看源碼:            1    /**多個按鈕信息框 **/   2     private static final int DIALOG_1 = 2;   3     /**列表框 **/       4     private static final int DIALOG_2 = 3;   5     /**進度條框 **/   6     private static final int DIALOG_3 = 4;   7     /**單項選擇列表框 **/   8     private static final int DIALOG_4 = 5;   9     /**多項選擇列表框 **/  10     private static final int DIALOG_5 = 6;  11     /**自定義布局 **/  12     private static final int DIALOG_6 = 7;  13     /**讀取進度框 **/  14     private static final int DIALOG_7 = 8;  15     /**自定義布局 **/  16     private static final int DIALOG_8 = 9;  17     /**讀取進度框 **/  18     private static final int DIALOG_9 = 10;  19       20     private ProgressDialog pDialog;  21     private DatePickerDialog dDialog;  22     private TimePickerDialog tDialog;  23     private Calendar c;  24     final String[] items = {"item0","item1","itme2","item3","itme4"};   25     ArrayList <Integer>MultiChoiceID = new ArrayList <Integer>();  26       27     @Override  28     protected void onCreate(Bundle savedInstanceState) {  29         super.onCreate(savedInstanceState);  30         setContentView(R.layout.activity_main);  31           32         Button button1 = (Button) findViewById(R.id.button1);  33         button1.setOnClickListener(new OnClickListener() {  34             public void onClick(View v) {  35             CreatDialog(DIALOG_1);  36             }  37         });  38           39         Button button2 = (Button) findViewById(R.id.button2);  40         button2.setOnClickListener(new OnClickListener() {  41             public void onClick(View v) {  42             CreatDialog(DIALOG_2);  43             }  44         });  45       46         Button button3 = (Button) findViewById(R.id.button3);  47         button3.setOnClickListener(new OnClickListener() {  48             public void onClick(View v) {  49             CreatDialog(DIALOG_3);  50             //mProgressDialog.setProgress(0);  51             }  52         });  53        54         Button button4 = (Button) findViewById(R.id.button4);  55         button4.setOnClickListener(new OnClickListener() {  56             public void onClick(View v) {  57             CreatDialog(DIALOG_4);  58             }  59         });    60           61         Button button5 = (Button) findViewById(R.id.button5);  62         button5.setOnClickListener(new OnClickListener() {  63             public void onClick(View v) {  64             CreatDialog(DIALOG_5);  65             }  66         });   67       68         Button button6 = (Button) findViewById(R.id.button6);  69         button6.setOnClickListener(new OnClickListener() {  70             public void onClick(View v) {  71             CreatDialog(DIALOG_6);  72             }  73         });   74           75         Button button7 = (Button) findViewById(R.id.button7);  76         button7.setOnClickListener(new OnClickListener() {  77             public void onClick(View v) {  78             CreatDialog(DIALOG_7);  79             }  80         });   81         Button button8 = (Button) findViewById(R.id.button8);  82         button8.setOnClickListener(new OnClickListener() {  83             public void onClick(View v) {  84             CreatDialog(DIALOG_8);  85             }  86         });   87           88         Button button9 = (Button) findViewById(R.id.button9);  89         button9.setOnClickListener(new OnClickListener() {  90             public void onClick(View v) {  91             CreatDialog(DIALOG_9);  92             }  93         });  94     }  95       96     public void CreatDialog(int id) {  97         AlertDialog.Builder builder = new Builder(DialogDemoActivity.this);  98         switch (id) {  99         case DIALOG_1: 100             builder.setIcon(R.drawable.ic_launcher); 101             builder.setTitle("投票"); 102             builder.setMessage("您認為什麼樣的內容吸引你?"); 103             builder.setPositiveButton("有趣的", new DialogInterface.OnClickListener() { 104  105                 @Override 106                 public void onClick(DialogInterface dialog, int which) { 107                     // TODO Auto-generated method stub 108                     showDialog("您選擇了有趣的!"); 109                 } 110  111             }); 112             builder.setNeutralButton("有內涵的", new DialogInterface.OnClickListener() { 113  114                 @Override 115                 public void onClick(DialogInterface dialog, int which) { 116                     // TODO Auto-generated method stub 117                     showDialog("您選擇了有內涵的!"); 118                 } 119  120             }); 121             builder.setNegativeButton("其他", new DialogInterface.OnClickListener() { 122  123                 @Override 124                 public void onClick(DialogInterface dialog, int which) { 125                     // TODO Auto-generated method stub 126                     showDialog("您選擇了其他!"); 127                 } 128  129             }); 130             break; 131         case DIALOG_2: 132             builder.setTitle("列表框"); 133              134             builder.setItems(items, new DialogInterface.OnClickListener() { 135  136                 @Override 137                 public void onClick(DialogInterface dialog, int which) { 138                     // TODO Auto-generated method stub 139                     showDialog("您選擇了"+items[which]); 140                 } 141  142             }); 143             break;     144         case DIALOG_3: 145             pDialog = new ProgressDialog(DialogDemoActivity.this); 146             pDialog.setIcon(R.drawable.ic_launcher); 147             pDialog.setTitle("帶進度條的"); 148             pDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 149             pDialog.setMax(100); 150             pDialog.setButton("ok", new DialogInterface.OnClickListener() { 151                  152                 @Override 153                 public void onClick(DialogInterface dialog, int which) { 154                     // TODO Auto-generated method stub 155                      156                 } 157             }); 158             pDialog.setButton2("cancle", new DialogInterface.OnClickListener() { 159                  160                 @Override 161                 public void onClick(DialogInterface dialog, int which) { 162                     // TODO Auto-generated method stub 163                      164                 } 165             }); 166             pDialog.show(); 167             new Thread(this).start(); 168             return; 169         case DIALOG_4: 170             builder.setTitle("單列表選擇框"); 171              172             builder.setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener() { 173                  174                 @Override 175                 public void onClick(DialogInterface dialog, int which) { 176                     // TODO Auto-generated method stub 177                     showDialog("你選擇的id為" + which + " , " + items[which]); 178                 } 179             }); 180             break; 181         case DIALOG_5: 182             MultiChoiceID.clear(); 183             builder.setTitle("多列表選擇框"); 184              185             builder.setMultiChoiceItems(items 186                     , new boolean[]{false,false,false,false,false} 187             ,new DialogInterface.OnMultiChoiceClickListener() { 188                 public void onClick(DialogInterface dialog, int whichButton, 189                         boolean isChecked) { 190                    if(isChecked) { 191                        MultiChoiceID.add(whichButton); 192                        showDialog("你選擇的id為" + whichButton + " , " + items[whichButton]); 193                    }else { 194                        MultiChoiceID.remove(whichButton); 195                    } 196                      197                 } 198             }); 199             builder.setPositiveButton("確定", new DialogInterface.OnClickListener() { 200                 public void onClick(DialogInterface dialog, int whichButton) { 201                     String str = ""; 202                     int size = MultiChoiceID.size(); 203                     for (int i = 0 ;i < size; i++) { 204                     str+= items[MultiChoiceID.get(i)] + ", "; 205                     } 206                     showDialog("你選擇的是" + str); 207                 } 208             }); 209             builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { 210                 public void onClick(DialogInterface dialog, int whichButton) { 211  212                 } 213             }); 214             break; 215         case DIALOG_6: 216  217             builder.setTitle("自定義對話框"); 218             LayoutInflater layoutInflater = LayoutInflater.from(this); 219             final View layout = layoutInflater.inflate(R.layout.test, null); 220              221             builder.setView(layout); 222              223             builder.setPositiveButton("確定", new DialogInterface.OnClickListener() { 224                 public void onClick(DialogInterface dialog, int whichButton) { 225                     EditText userName = (EditText) layout.findViewById(R.id.etUserName); 226                     EditText password = (EditText) layout.findViewById(R.id.etPassWord); 227                     showDialog("姓名 :"  + userName.getText().toString()  + "密碼:" + password.getText().toString() ); 228                 } 229             }); 230             builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { 231                 public void onClick(DialogInterface dialog, int whichButton) { 232  233                 } 234             }); 235             break; 236         case DIALOG_7: 237             pDialog = new ProgressDialog(DialogDemoActivity.this); 238             pDialog.setIcon(R.drawable.ic_launcher); 239             pDialog.setTitle("循環進度"); 240             pDialog.setMessage("正在讀取"); 241             pDialog.setIndeterminate(true); // 設置進度條不明確,即一直在滾動,不清楚進度 242             pDialog.setCancelable(true); // 設置 返回鍵 是否取消 進度框 243             pDialog.show(); 244             return; 245         case DIALOG_8: 246             c= Calendar.getInstance(); 247             dDialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() { 248                  249                 @Override 250                 public void onDateSet(DatePicker view, int year, int monthOfYear, 251                         int dayOfMonth) { 252                     // TODO Auto-generated method stub 253                      254                 } 255             }, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH)); 256             dDialog.show(); 257             return; 258         case DIALOG_9: 259             c= Calendar.getInstance(); 260             tDialog = new TimePickerDialog(                //創建TimePickerDialog對象 261                     this, 262                     new TimePickerDialog.OnTimeSetListener(){ //創建OnTimeSetListener監聽器 263                         @Override 264                         public void onTimeSet(TimePicker tp, int hourOfDay, int minute) { 265                         }                      266                      }, 267                      c.get(Calendar.HOUR_OF_DAY),        //傳入當前小時數 268                      c.get(Calendar.MINUTE),            //傳入當前分鐘數 269                      false 270                   ); 271             tDialog.show(); 272             return; 273         } 274          275         builder.create().show(); 276          277     } 278  279     private void showDialog(String str) { 280             new AlertDialog.Builder(DialogDemoActivity.this) 281             .setMessage(str) 282             .show(); 283     } 284      285     @Override 286     public void run() { 287         int Progress = 0; 288         while(Progress < 100) { 289         try { 290             Thread.sleep(100); 291             Progress++;   292             pDialog.incrementProgressBy(1); 293         } catch (InterruptedException e) { 294             // TODO Auto-generated catch block 295             e.printStackTrace(); 296         } 297         } 298           299     } 復制代碼   其中自定義Dialog的布局文件test.xml   復制代碼  1 <?xml version="1.0" encoding="utf-8"?>  2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  3 android:layout_height="wrap_content"   4 android:layout_width="wrap_content"  5 android:orientation="horizontal"  6 android:id="@+id/dialog">  7 <LinearLayout  8 android:layout_height="wrap_content"   9 android:layout_width="wrap_content" 10 android:orientation="horizontal" 11 android:id="@+id/dialogname"> 12  13 <TextView android:layout_height="wrap_content" 14    android:layout_width="wrap_content" 15   android:id="@+id/tvUserName"  16   android:text="姓名:" /> 17 <EditText android:layout_height="wrap_content" 18   android:layout_width="wrap_content"  19   android:id="@+id/etUserName"  20   android:minWidth="200dip"/> 21 </LinearLayout>   22 <LinearLayout 23 android:layout_height="wrap_content"  24 android:layout_width="wrap_content" 25 android:orientation="horizontal" 26 android:id="@+id/dialognum" 27  android:layout_below="@+id/dialogname" 28 > 29   <TextView android:layout_height="wrap_content" 30    android:layout_width="wrap_content" 31   android:id="@+id/tvPassWord"  32   android:text="密碼:" /> 33 <EditText android:layout_height="wrap_content" 34   android:layout_width="wrap_content"  35   android:id="@+id/etPassWord"  36   android:minWidth="200dip"/> 37  </LinearLayout>   38   </RelativeLayout>       4、Dialog設計模式     Dialog設計模式中有使用建造者模式,建造者模式將一個復雜的構建與其表示相分離,使得同樣的構建過程可以創建不同的表示。 Android中AlertDialog是一個多面手,可以有著不同的樣式和呈現,這樣通過Builder就可以有效實現構建和表示的分離。   AlertDialog.Builder就是具體建造者,另外,它是以匿名類的方式被創建的,而且,Builder類是AlertDialog的內部類,這樣, 耦合性比較低,這正是面向對象中要達到的設計意圖之一。 最後調用show函數,它的返回類型正是我們要創建的產品,即AlertDialog。  所以,Builder(具體建造者)是AlertDialog(產品)的內部匿名類,用來創建並顯示一個dialog。
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved