android幾種不同對話方塊的實現方式_Android

來源:互聯網
上載者:User

app中肯定是少不了與使用者互動的各種dialog,下面給大家介紹幾種提示框的提示。

一般建立一個對話方塊需要經過以下幾步:

  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、顯示提示訊息的對話方塊。

  

/**  * 顯示提示訊息的對話方塊  * @author codingblock --  * @param context  上下文  * @param title  對話方塊標題  * @param message  對話方塊提示內容  * @return  */  public AlertDialog.Builder simpleDialog(final Context context, String title, String message){   AlertDialog.Builder builder = new AlertDialog.Builder(context)   .setTitle(title)   .setIcon(R.drawable.ic_launcher)   .setMessage(message)   .setPositiveButton("完成", null)   .setNegativeButton("取消", null);   return builder;  }

   上面的代碼是將一個簡單提示對話方塊封裝成了一個方法,調用時可以省去重複代碼,直接傳遞title,message等參數即可,其中該對話方塊用設定了icon,title等屬性,還調用了setPositiveButton()和setNegativeButton()方法添加按鈕,因為該方法(simpleDialog())在這裡僅提供調用,所以沒有實現按鈕的具體功能,可在實際調用中重寫這兩個方法從而實現具體功能。

   調用方式如下,其他幾種方式的對話方塊與此方法調用方式基本一致,以下就不再一一給出。

public void onClickSimple(View v){   builder = new Dialog().simpleDialog(this, "簡單對話方塊", "對話方塊內容");   builder.setPositiveButton("確定", new OnClickListener() {    @Override    public void onClick(DialogInterface arg, int arg) {     //確定    }   })   .setNegativeButton("取消", new OnClickListener() {    @Override    public void onClick(DialogInterface arg, int arg) {     //取消    }   });   builder.create().show();  }

  除此之外,AlertDialog.Builder還提供了setNeutralButton()方法來添加一個裝飾性的按鈕。因此Android的對話一共可以產生三個按鈕的對話方塊。

2、簡單清單項目對話方塊

   

/**  * 簡單清單項目對話方塊  * @author codingblock --  * @param context  上下文  * @param title  對話方塊標題  * @param items  對話方塊清單項目CharSequence類型數組,也可根據需要改成其他類型  * @return  */  public AlertDialog.Builder simpleListDialog(final Context context, String title, final CharSequence[] items){   AlertDialog.Builder builder = new AlertDialog.Builder(context)   .setTitle(title)   .setIcon(R.drawable.ic_launcher)   .setItems(items, new OnClickListener() {        @Override    public void onClick(DialogInterface dialog, int which) {     Toast.makeText(context, "您選中了:"+ items[which], Toast.LENGTH_SHORT).show();    }   });   return builder;  }

  上面的代碼通過調用setItems()方法為對話方塊設定了多個清單項目,其中setItems的第一個參數可以是Charsequence和int類型。

3、單選清單項目對話方塊

  

/**  * 單選清單項目對話方塊  * @author codingblock --  * @param context  上下文  * @param title  對話方塊標題  * @param items  對話方塊清單項目 CharSequence類型數組  * @return  */  public AlertDialog.Builder simpleChoiceDialog(final Context context, String title, final CharSequence[] items){   AlertDialog.Builder builder = new AlertDialog.Builder(context)   .setTitle(title)   .setIcon(R.drawable.ic_launcher)   //第二個參數為預設選中項, :代表預設選中第一項   .setSingleChoiceItems(items, , new OnClickListener() {    @Override    public void onClick(DialogInterface dialog, int which) {     Toast.makeText(context, "您選中了:"+ items[which], Toast.LENGTH_SHORT).show();    }   });   return builder;  }

  以上代碼通過調用setSingleChoiceItems()方法建立了帶單選列表的對話方塊。調用setSingleChoiceItems()方法時既可傳入數組作為參數,也可傳入Cursor(相當於資料庫查詢結果集)作為參數,也可傳入ListAdapter作為參數。另外,如果傳入ListAdapter作為參數,則由ListAdapter來提供多個清單項目組件。

4、多選列表對話方塊

  

    /**  * 多選清單項目對話方塊  * @author codingblock --  * @param context  上下文  * @param title   對話方塊標題  * @param items  對話方塊清單項目 CharSequence類型數組  * @param checked  對話方塊初始選定狀態 boolean類型數組  * @return  */  public AlertDialog.Builder multiChoiceDialog(final Context context, String title, final CharSequence[] items, final boolean[] checked){   AlertDialog.Builder builder = new AlertDialog.Builder(context)   .setTitle(title)   .setIcon(R.drawable.ic_launcher)   //第二個參數為預設選中項,是一個boolean型的數組   .setMultiChoiceItems(items, checked, null)   .setPositiveButton("完成", null)   .setNegativeButton("取消", null);   return builder;  }

  以上代碼通過調用setMultiChoiceItems()方法建立了一個多選列表的對話方塊。在調用setMultiChoiceItems()時既可傳入數組作為參數,也可傳入Cursor作為參數。需要注意的時在調用setMultiChoiceItems()方法添加多選列表時,還需要傳入一個boolean[]參數,該參數有兩個作用:①設定初始化時選中哪些清單項目。②該boolean[]類型的參數還可用於動態擷取多選清單項目的選中狀態。

5、自訂欄表項對話方塊

  
   

 /**  * 自訂欄表項對話方塊  * @author codingblock --  * @param context  上下文  * @param title  對話方塊標題  * @param items  對話方塊清單項目 String類型數組,也可更具需要改成其他類型  * @return  */  public AlertDialog.Builder customListDialog(final Context context, String title, String[] items){   AlertDialog.Builder builder = new AlertDialog.Builder(context)   .setTitle(title)   .setIcon(R.drawable.ic_launcher)   .setAdapter(new ArrayAdapter<String>(context, R.layout.array_item, R.id.tv_item, items), null)   .setPositiveButton("完成", null)   .setNegativeButton("取消", null);   return builder;  }

  以上代碼通過setAdapter()設定了對話方塊的內容,該方法需要傳入一個Adapter參數,這樣的話,就可以通過Adapter實現多個組件的繪製。其中setAdapter方法中調用的布局檔案array_item.xml代碼如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  xmlns:tools="http://schemas.android.com/tools"  android:id="@+id/container"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:gravity="center"  android:padding="dp"  android:orientation="horizontal">  <ImageView   android:id="@+id/iv_img"   android:layout_width="dp"   android:layout_height="dp"   android:src="@drawable/ic_launcher" />  <TextView   android:id="@+id/tv_item"   android:layout_width="fill_parent"   android:layout_height="wrap_content"   android:layout_margin="dp"   android:gravity="center"   android:text="清單項目" /> </LinearLayout>

  其實,不僅setAdapter()方法可以接受Adapter作為參數,setSingleChoice()方法也可以接受Adapter參數,也就是說,使用setSingleChoice()方法也可以實現自訂欄表項對話方塊。

6、自訂View的對話方塊

  

/**  * 自訂View的對話方塊  * @author codingblock --  * @param context  上下文  * @param title  對話方塊標題  */  public AlertDialog.Builder customeViewDialog(final Context context, String title){   LinearLayout loginDialog = (LinearLayout)LayoutInflater.from(context).inflate(R.layout.login_dialog, null);   AlertDialog.Builder builder = new AlertDialog.Builder(context)   .setTitle(title)   .setIcon(R.drawable.ic_launcher)   .setView(loginDialog)   .setPositiveButton("完成", null)   .setNegativeButton("取消", null);   return builder;  }

      以上代碼通過setView()方法調用自訂的布局檔案顯示介面。代碼中首先顯示裝載了login_dialog.xml檔案,並返回該檔案對應的View,接下來程式調用了setView()方法來顯示View。

  其中的login_dialog.xml檔案代碼如下:

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  xmlns:tools="http://schemas.android.com/tools"  android:id="@+id/container"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:padding="dp"  android:orientation="vertical">  <LinearLayout    android:layout_width="fill_parent"   android:layout_height="wrap_content"   android:orientation="horizontal">   <TextView     android:id="@+id/tv_name"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="使用者名稱:"/>   <EditText     android:id="@+id/et_name"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:focusable="true"    android:hint="input name" />  </LinearLayout>  <LinearLayout    android:layout_width="fill_parent"   android:layout_height="wrap_content"   android:orientation="horizontal">   <TextView     android:id="@+id/tv_pwd"    android:layout_width="wrap_content"    android:layout_height="wrap_content"    android:text="密碼:"/>   <EditText     android:id="@+id/et_pwd"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:hint="input password" />  </LinearLayout> </LinearLayout>

以上介紹了六種不同對話方塊的實現方式,希望對大家有所協助。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.