Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android開發必知--幾種不同對話框的實現

Android開發必知--幾種不同對話框的實現

編輯:關於Android編程

 在開發過程中,與用戶交互式免不了會用到對話框以實現更好的用戶體驗,所以掌握幾種對話框的實現方法還是非常有必要的。在看具體實例之前先對AlertDialog做一個簡單介紹。AlertDialog是功能最豐富、實踐應用最廣的對話框,它可以生成各種內容的對話框。但實際上AlertDialog生成的對話框總體可分為以下4個區域:圖標區、標題區、內容區、按鈕區。   一般創建一個對話框需要經過以下幾步:     1、創建AlertDialog.Builder對象。     2、調用AlertDialog.Builder的setTitle()或者setCustomTitle()方法設置標題。     3、調用AlertDialog.Builder的setIcon()方法設置標題logo。     4、調用AlertDialog.Builder的相關方法設置對話框內容。     5、調用AlertDialog.Builder的setPositiveButton()、setNegativeButton()或setNeutralButton()方法添加多個按鈕。     6、調用AlertDialog.Builder的create()方法創建AlertDialog對象,再調用AlertDialog對象的show()方法將該對話框顯示出來。   其中,第4步設置對話框的內容,這裡有6種方法來指定:     ·setMessage():設置對話框內容為簡單文本內容。     ·setItems():設置對話框內容為簡單列表項。     ·setSingleChoiceItems():設置對話框內容為單選列表項。     ·setMultiChoiceItems():設置對話框內容為多選列表項。     ·setAdapter():設置對話框內容為自定義列表項。     ·setView():設置對話框內容為自定義View。   下面通過幾個實例來介紹一下AlertDialog的用法。   1、顯示提示消息的對話框。       
 1 /**
 2      * 顯示提示消息的對話框
 3      * @author codingblock 2015-8-11
 4      * @param  context     上下文
 5      * @param  title       對話框標題
 6      * @param  message     對話框提示內容
 7      * @return
 8      */
 9     public AlertDialog.Builder simpleDialog(final Context context, String title, String message){
10         AlertDialog.Builder builder = new AlertDialog.Builder(context)
11         .setTitle(title)
12         .setIcon(R.drawable.ic_launcher)
13         .setMessage(message)
14         .setPositiveButton("完成", null)
15         .setNegativeButton("取消", null);
16         return builder;

 

     上面的代碼是將一個簡單提示對話框封裝成了一個方法,調用時可以省去重復代碼,直接傳遞title,message等參數即可,其中該對話框用設置了icon,title等屬性,還調用了setPositiveButton()和setNegativeButton()方法添加按鈕,因為該方法(simpleDialog())在這裡僅提供調用,所以沒有實現按鈕的具體功能,可在實際調用中重寫這兩個方法從而實現具體功能。      調用方式如下,其他幾種方式的對話框與此方法調用方式基本一致,以下就不再一一給出。    
 1   public void onClickSimple(View v){
 2         builder = new Dialog().simpleDialog(this, "簡單對話框", "對話框內容");
 3         builder.setPositiveButton("確定", new OnClickListener() {
 4             @Override
 5             public void onClick(DialogInterface arg0, int arg1) {
 6                 //確定
 7             }
 8         })
 9         .setNegativeButton("取消", new OnClickListener() {
10             @Override
11             public void onClick(DialogInterface arg0, int arg1) {
12                 //取消
13             }
14         });
15         builder.create().show();
16     }
 

 

     除此之外,AlertDialog.Builder還提供了setNeutralButton()方法來添加一個裝飾性的按鈕。因此Android的對話一共可以生成三個按鈕的對話框。   2、簡單列表項對話框         
 1   /**
 2      * 簡單列表項對話框
 3      * @author codingblock 2015-8-11
 4      * @param  context     上下文
 5      * @param  title       對話框標題
 6      * @param  items       對話框列表項CharSequence類型數組,也可根據需要改成其他類型
 7      * @return
 8      */
 9     public AlertDialog.Builder simpleListDialog(final Context context, String title, final CharSequence[] items){
10         AlertDialog.Builder builder = new AlertDialog.Builder(context)
11         .setTitle(title)
12         .setIcon(R.drawable.ic_launcher)
13         .setItems(items, new OnClickListener() {
14             
15             @Override
16             public void onClick(DialogInterface dialog, int which) {
17                 Toast.makeText(context, "您選中了:"+ items[which], Toast.LENGTH_SHORT).show();
18             }
19         });
20         return builder;
21     }

 

      上面的代碼通過調用setItems()方法為對話框設置了多個列表項,其中setItems的第一個參數可以是Charsequence和int類型。   3、單選列表項對話框         
 1   /**
 2      * 單選列表項對話框
 3      * @author codingblock 2015-8-11
 4      * @param  context     上下文
 5      * @param  title       對話框標題
 6      * @param  items       對話框列表項 CharSequence類型數組
 7      * @return
 8      */
 9     public AlertDialog.Builder simpleChoiceDialog(final Context context, String title, final CharSequence[] items){
10         AlertDialog.Builder builder = new AlertDialog.Builder(context)
11         .setTitle(title)
12         .setIcon(R.drawable.ic_launcher)
13         //第二個參數為默認選中項, 0:代表默認選中第一項
14         .setSingleChoiceItems(items, 0, new OnClickListener() {
15             @Override
16             public void onClick(DialogInterface dialog, int which) {
17                 Toast.makeText(context, "您選中了:"+ items[which], Toast.LENGTH_SHORT).show();
18             }
19         });
20         return builder;
 

 

    以上代碼通過調用setSingleChoiceItems()方法創建了帶單選列表的對話框。調用setSingleChoiceItems()方法時既可傳入數組作為參數,也可傳入Cursor(相當於數據庫查詢結果集)作為參數,也可傳入ListAdapter作為參數。另外,如果傳入ListAdapter作為參數,則由ListAdapter來提供多個列表項組件。   4、多選列表對話框         
 1   /**
 2      * 多選列表項對話框
 3      * @author codingblock 2015-8-11
 4      * @param  context     上下文
 5      * @param  title            對話框標題
 6      * @param  items       對話框列表項 CharSequence類型數組
 7      * @param  checked     對話框初始選定狀態  boolean類型數組
 8      * @return
 9      */
10     public AlertDialog.Builder multiChoiceDialog(final Context context, String title, final CharSequence[] items, final boolean[] checked){
11         AlertDialog.Builder builder = new AlertDialog.Builder(context)
12         .setTitle(title)
13         .setIcon(R.drawable.ic_launcher)
14         //第二個參數為默認選中項,是一個boolean型的數組
15         .setMultiChoiceItems(items, checked, null)
16         .setPositiveButton("完成", null)
17         .setNegativeButton("取消", null);
18         return builder;
19     }
 

 

    以上代碼通過調用setMultiChoiceItems()方法創建了一個多選列表的對話框。在調用setMultiChoiceItems()時既可傳入數組作為參數,也可傳入Cursor作為參數。需要注意的時在調用setMultiChoiceItems()方法添加多選列表時,還需要傳入一個boolean[]參數,該參數有兩個作用:①設置初始化時選中哪些列表項。②該boolean[]類型的參數還可用於動態的獲取多選列表項的選中狀態。   5、自定義列表項對話框       
 1   /**
 2      * 自定義列表項對話框
 3      * @author codingblock 2015-8-11
 4      * @param  context     上下文
 5      * @param  title       對話框標題
 6      * @param  items       對話框列表項 String類型數組,也可更具需要改成其他類型
 7      * @return
 8      */
 9     public AlertDialog.Builder customListDialog(final Context context, String title, String[] items){
10         AlertDialog.Builder builder = new AlertDialog.Builder(context)
11         .setTitle(title)
12         .setIcon(R.drawable.ic_launcher)
13         .setAdapter(new ArrayAdapter<String>(context, R.layout.array_item, R.id.tv_item, items), null)
14         .setPositiveButton("完成", null)
15         .setNegativeButton("取消", null);
16         return builder;
17     }

 

      以上代碼通過setAdapter()設置了對話框的內容,該方法需要傳入一個Adapter參數,這樣的話,就可以通過Adapter實現多個組件的繪制。其中setAdapter方法中調用的布局文件array_item.xml代碼如下:    
 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:id="@+id/container"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent"
 6     android:gravity="center"
 7     android:padding="10dp"
 8     android:orientation="horizontal">
 9     <ImageView
10         android:id="@+id/iv_img"
11         android:layout_width="30dp"
12         android:layout_height="30dp"
13         android:src="@drawable/ic_launcher" />
14     <TextView
15         android:id="@+id/tv_item"
16         android:layout_width="fill_parent"
17         android:layout_height="wrap_content"
18         android:layout_margin="10dp"
19         android:gravity="center"
20         android:text="列表項" />
21 </LinearLayout>
 

 

    其實,不僅setAdapter()方法可以接受Adapter作為參數,setSingleChoice()方法也可以接受Adapter參數,也就是說,使用setSingleChoice()方法也可以實現自定義列表項對話框。   6、自定義View的對話框         
 1   /**
 2      * 自定義View的對話框
 3      * @author codingblock 2015-8-11
 4      * @param  context     上下文
 5      * @param  title       對話框標題
 6      */
 7     public AlertDialog.Builder customeViewDialog(final Context context, String title){
 8         LinearLayout loginDialog = (LinearLayout)LayoutInflater.from(context).inflate(R.layout.login_dialog, null);
 9         AlertDialog.Builder builder = new AlertDialog.Builder(context)
10         .setTitle(title)
11         .setIcon(R.drawable.ic_launcher)
12         .setView(loginDialog)
13         .setPositiveButton("完成", null)
14         .setNegativeButton("取消", null);
15         return builder;
16     }
 

 

    以上代碼通過setView()方法調用自定義的布局文件顯示界面。代碼中首先顯示裝載了login_dialog.xml文件,並返回該文件對應的View,接下來程序調用了setView()方法來顯示View。     其中的login_dialog.xml文件代碼如下:    
 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:id="@+id/container"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent"
 6     android:padding="10dp"
 7     android:orientation="vertical">
 8     <LinearLayout 
 9         android:layout_width="fill_parent"
10         android:layout_height="wrap_content"
11         android:orientation="horizontal">
12         <TextView 
13             android:id="@+id/tv_name"
14             android:layout_width="wrap_content"
15             android:layout_height="wrap_content"
16             android:text="用戶名:"/>
17         <EditText 
18             android:id="@+id/et_name"
19             android:layout_width="match_parent"
20             android:layout_height="wrap_content"
21             android:focusable="true"
22             android:hint="input name" />
23     </LinearLayout>
24     <LinearLayout 
25         android:layout_width="fill_parent"
26         android:layout_height="wrap_content"
27         android:orientation="horizontal">
28         <TextView 
29             android:id="@+id/tv_pwd"
30             android:layout_width="wrap_content"
31             android:layout_height="wrap_content"
32             android:text="密碼:"/>
33         <EditText 
34             android:id="@+id/et_pwd"
35             android:layout_width="match_parent"
36             android:layout_height="wrap_content"
37             android:hint="input password" />
38     </LinearLayout>
39 </LinearLayout>

 

   
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved