android常用對話方塊封裝

Ruthless發表於2013-06-21

在android開發中,經常會用到對話方塊跟使用者進行互動,方便使用者可操作性;接下來就對常用對話方塊進行簡單封裝,避免在專案中出現冗餘程式碼,加重後期專案的維護量;程式碼如有問題歡迎大家拍磚指正一起進步。

先貼出演示結果,在曬出演示程式碼。
1、執行成功後,原始介面如下:

2、點選“顯示普通對話方塊”,效果介面如下:

3、點選“顯示列表對話方塊”,效果介面如下:

4、點選“顯示單選按鈕對話方塊”,效果介面如下:

5、點選“顯示覆選對話方塊”,效果介面如下:

程式碼:
1、專案目錄結構如下

2、對話方塊封裝類DialogTool

package com.hrtx.util;
 
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface.OnClickListener;
 
/**
 * 對話方塊封裝類
 * 
 * @author jiqinlin
 *
 */
public class DialogTool {
  
    /**
     * 建立普通對話方塊
     * 
     * @param ctx 上下文 必填
     * @param iconId 圖示,如:R.drawable.icon 必填
     * @param title 標題 必填
     * @param message 顯示內容 必填
     * @param btnName 按鈕名稱 必填
     * @param listener 監聽器,需實現android.content.DialogInterface.OnClickListener介面 必填
     * @return
     */
 public static Dialog createNormalDialog(Context ctx, 
   int iconId, 
   String title, 
   String message, 
   String btnName, 
   OnClickListener listener) {
  Dialog dialog=null;
  android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(ctx);
  // 設定對話方塊的圖示
  builder.setIcon(iconId);
  // 設定對話方塊的標題
  builder.setTitle(title);
  // 設定對話方塊的顯示內容
  builder.setMessage(message);
  // 新增按鈕,android.content.DialogInterface.OnClickListener.OnClickListener
  builder.setPositiveButton(btnName, listener);
  // 建立一個普通對話方塊
  dialog = builder.create();
  return dialog;
 }
  
  
    /**
     * 建立列表對話方塊
     * 
     * @param ctx 上下文 必填
     * @param iconId 圖示,如:R.drawable.icon 必填
     * @param title 標題 必填
     * @param itemsId 字串陣列資源id 必填
     * @param listener 監聽器,需實現android.content.DialogInterface.OnClickListener介面 必填
     * @return
     */
 public static Dialog createListDialog(Context ctx, 
   int iconId, 
   String title, 
   int itemsId, 
   OnClickListener listener) {
  Dialog dialog=null;
  android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(ctx);
  // 設定對話方塊的圖示
  builder.setIcon(iconId);
  // 設定對話方塊的標題
  builder.setTitle(title);
  // 新增按鈕,android.content.DialogInterface.OnClickListener.OnClickListener
  builder.setItems(itemsId, listener);
  // 建立一個列表對話方塊
  dialog = builder.create();
  return dialog;
 }
  
    /**
     * 建立單選按鈕對話方塊
     * 
     * @param ctx 上下文 必填
     * @param iconId 圖示,如:R.drawable.icon 必填
     * @param title 標題 必填
     * @param itemsId 字串陣列資源id 必填
     * @param listener 單選按鈕項監聽器,需實現android.content.DialogInterface.OnClickListener介面 必填
     * @param btnName 按鈕名稱 必填
     * @param listener2 按鈕監聽器,需實現android.content.DialogInterface.OnClickListener介面 必填
     * @return
     */
 public static Dialog createRadioDialog(Context ctx, 
   int iconId, 
   String title, 
   int itemsId, 
   OnClickListener listener,
   String btnName,
   OnClickListener listener2) {
  Dialog dialog=null;
  android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(ctx);
  // 設定對話方塊的圖示
  builder.setIcon(iconId);
  // 設定對話方塊的標題
  builder.setTitle(title);
  // 0: 預設第一個單選按鈕被選中
  builder.setSingleChoiceItems(itemsId, 0, listener);
  // 新增一個按鈕
  builder.setPositiveButton(btnName, listener2) ;
  // 建立一個單選按鈕對話方塊
  dialog = builder.create();
  return dialog;
 }
  
  
    /**
     * 建立複選對話方塊
     * 
     * @param ctx 上下文 必填
     * @param iconId 圖示,如:R.drawable.icon 必填
     * @param title 標題 必填
     * @param itemsId 字串陣列資源id 必填
     * @param flags 初始複選情況 必填
     * @param listener 單選按鈕項監聽器,需實現android.content.DialogInterface.OnMultiChoiceClickListener介面 必填
     * @param btnName 按鈕名稱 必填
     * @param listener2 按鈕監聽器,需實現android.content.DialogInterface.OnClickListener介面 必填
     * @return
     */
 public static Dialog createCheckBoxDialog(Context ctx, 
   int iconId, 
   String title, 
   int itemsId, 
   boolean[] flags,
   android.content.DialogInterface.OnMultiChoiceClickListener listener,
   String btnName,
   OnClickListener listener2) {
  Dialog dialog=null;
  android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(ctx);
  // 設定對話方塊的圖示
  builder.setIcon(iconId);
  // 設定對話方塊的標題
  builder.setTitle(title);
  builder.setMultiChoiceItems(itemsId, flags, listener);
  // 新增一個按鈕
  builder.setPositiveButton(btnName, listener2) ;
  // 建立一個複選對話方塊
  dialog = builder.create();
  return dialog;
 }
}

3、對話方塊Activity類DialogActivity

package com.ljq.activity;
 
import android.app.Activity;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
 
/**
 * 對話方塊Activity類
 * 
 * @author jiqinlin
 *
 */
public class DialogActivity extends Activity {
 private boolean[] flags=new boolean[]{false,true,false}; //初始複選情況
 private String[] items=null;
  
    private EditText etText=null;
    private Button btnNormal=null;
    private Button btnList=null; 
    private Button btnRadio=null;
    private Button btnCheckBox=null;
     
    private static final int DIALOG_NORMAL=0; //普通對話方塊常量
    private static final int DIALOG_LIST=1; //列表對話方塊常量
    private static final int DIALOG_RADIO=2; //單選按鈕對話方塊常量
    private static final int DIALOG_CHECKBOX=3; //複選對話方塊常量
     
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
         
        items=getResources().getStringArray(R.array.hobby);
         
        etText=(EditText)findViewById(R.id.etText);
        btnNormal=(Button)findViewById(R.id.btnNormal);
        btnList=(Button)findViewById(R.id.btnList);
        btnRadio=(Button)findViewById(R.id.btnRadio);
        btnCheckBox=(Button)findViewById(R.id.btnCheckBox);
        btnNormal.setOnClickListener(l);
        btnList.setOnClickListener(l);
        btnRadio.setOnClickListener(l);
        btnCheckBox.setOnClickListener(l);
    }
     
    @Override
    protected Dialog onCreateDialog(int id) {
     Dialog dialog=null;
     switch (id) {
  case DIALOG_NORMAL: //建立普通對話方塊
   dialog = DialogTool.createNormalDialog(this, 
     R.drawable.icon, 
     "普通對話方塊", 
     "這是普通對話方塊中的內容!", 
     " 確 定 ", 
        new android.content.DialogInterface.OnClickListener(){
      @Override
      public void onClick(DialogInterface dialog, int which) {
       etText.setText("這是普通對話方塊中的內容!");
       return;
      }
              }
            );
   break;
  case DIALOG_LIST: // 建立列表對話方塊
   dialog = DialogTool.createListDialog(this, 
     R.drawable.icon, 
     "列表對話方塊", 
     R.array.hobby, 
        new android.content.DialogInterface.OnClickListener(){
      @Override
      public void onClick(DialogInterface dialog, int which) {
       String hoddy=getResources().getStringArray(R.array.hobby)[which];     
       etText.setText("您選擇了: "+hoddy);
       return;
      }
              }
            );
   break;
  case DIALOG_RADIO: // 建立單選按鈕對話方塊
   dialog=DialogTool.createRadioDialog(this, 
     R.drawable.icon,
     "單選按鈕對話方塊",
     R.array.hobby, 
        new android.content.DialogInterface.OnClickListener() {
      @Override
      public void onClick(DialogInterface dialog, int which) {
       String hoddy = getResources().getStringArray(
         R.array.hobby)[which];
       etText.setText("您選擇了: " + hoddy);
       return;
      }
     },
        " 確 定 ",
           new android.content.DialogInterface.OnClickListener() {
      @Override
      public void onClick(DialogInterface dialog, int which) {
       Toast.makeText(DialogActivity.this, 
         "您按了確定按鈕!", Toast.LENGTH_LONG).show();
       return;
      }
     }
   );
   break;
  case DIALOG_CHECKBOX: // 建立核取方塊對話方塊
   dialog=DialogTool.createCheckBoxDialog(this, 
     R.drawable.icon,
     "複選對話方塊",
     R.array.hobby,
     flags, 
     new DialogInterface.OnMultiChoiceClickListener() {
      public void onClick(DialogInterface dialog, int which, boolean isChecked) {
       flags[which] = isChecked;
       String result = "您選擇了:";
       for (int i = 0; i < flags.length; i++) {
        if (flags[i]) {
         result = result + items[i] + "、";
        }
       }
       etText.setText(result.substring(0, result.length() - 1));
      }
     },
     " 確 認 ",
           new android.content.DialogInterface.OnClickListener() {
      @Override
      public void onClick(DialogInterface dialog, int which) {
       Toast.makeText(DialogActivity.this, "您按了確定按鈕!", Toast.LENGTH_LONG).show();
       return;
      }
     }
       
   );
   break;
  }
     return dialog;
    }
     
    //按鈕監聽
    View.OnClickListener l = new View.OnClickListener() {
  @Override
  public void onClick(View v) {
   Button btn = (Button) v;
   switch (btn.getId()) {
   case R.id.btnNormal: //普通對話方塊
                //顯示對話方塊
    showDialog(DIALOG_NORMAL);
    break;
   case R.id.btnList: //列表對話方塊
                //顯示對話方塊
    showDialog(DIALOG_LIST);
    break;
   case R.id.btnRadio: //單選按鈕對話方塊
                //顯示對話方塊
    showDialog(DIALOG_RADIO);
    break;
   case R.id.btnCheckBox: //複選對話方塊
                //顯示對話方塊
    showDialog(DIALOG_CHECKBOX);
    break;
   }
  }
 };
}

4、佈局檔案main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <EditText android:text=""
        android:id="@+id/etText"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:editable="false"
        android:cursorVisible="false" />
    <Button android:text="顯示普通對話方塊"
        android:id="@+id/btnNormal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
    <Button android:text="顯示列表話框"
        android:id="@+id/btnList"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
    <Button android:text="顯示單選按鈕對話方塊"
        android:id="@+id/btnRadio"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
    <Button android:text="顯示覆選對話方塊"
        android:id="@+id/btnCheckBox"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

5、陣列變數array.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- 
resources的使用 
 
resoureces就是res目錄下的那些目錄和檔案,常用的有: 
res/drawable/ 用來存放圖片檔案 
res/layout/ 用來存放佈局定義檔案 
res/values/ 用來存放一些變數、引數等檔案
-->
<resources>
 <string-array name="hobby">
  <item>游泳</item>
  <item>打籃球</item>
  <item>登山</item>
 </string-array>
</resources>

6、清單檔案

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.ljq.activity"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".DialogActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
 
    </application>
    <uses-sdk android:minSdkVersion="4" />
 
</manifest>

完畢!!!!!

相關文章