在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>
完畢!!!!!