Android中提供了多種對話框,在實際應用中我們可能會需要修改這些已有的對話框。本實例就是從實際出發,展現了andorid中大部分對話框,代碼中用了一個對話框管理類來做封裝,其中還定義了對話框的動畫、自定義樣式等等。
主布局文件(全是button)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="16dp" > <ScrollView android:id="@+id/scrollView1" android:layout_width="match_parent" android:layout_height="wrap_content" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <Button android:id="@+id/simple_button_id" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="buttonListener" android:text="最簡單的對話框" /> <Button android:id="@+id/list_button_id" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="buttonListener" android:text="列表對話框" /> <Button android:id="@+id/singleChoice_button_id" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="buttonListener" android:text="單選對話框" /> <Button android:id="@+id/multiChoice_button_id" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="buttonListener" android:text="多選對話框" /> <Button android:id="@+id/adapter_button_id" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="buttonListener" android:text="用適配器創建的對話框" /> <Button android:id="@+id/view_button_id" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="buttonListener" android:text="自定義視圖的對話框" /> <Button android:id="@+id/progress_button_id" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="buttonListener" android:text="有進度條的對話框" /> <Button android:id="@+id/activity_button_id" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="buttonListener" android:text="用Activity作的對話框" /> <Button android:id="@+id/popup_button_id" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="buttonListener" android:text="用PopupWindow創建的對話框" /> <Button android:id="@+id/date_button_id" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="buttonListener" android:text="選擇日期的對話框" /> <Button android:id="@+id/time_button_id" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="buttonListener" android:text="選擇時間的對話框" /> </LinearLayout> </ScrollView> </LinearLayout>
自定義對話框視圖
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#f5f5f5" android:orientation="vertical" > <RelativeLayout android:layout_width="match_parent" android:layout_height="60dp" > <ImageView android:id="@+id/dialog_imageView_id" android:layout_width="match_parent" android:layout_height="3dp" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:background="#ffd060" /> <TextView android:id="@+id/dialog_textView_id" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="自定義布局" android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="#50c0e9" /> </RelativeLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:layout_marginTop="10dp" android:background="@drawable/my_input_box" android:paddingLeft="20dp" android:paddingRight="20dp" > <EditText android:id="@+id/dialog_username_EditText_id" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:background="@null" android:ems="10" android:hint="學號/賬號" android:inputType="number" > <requestFocus /> </EditText> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:background="@drawable/my_input_box" android:paddingLeft="20dp" android:paddingRight="20dp" > <EditText android:id="@+id/dialog_password_EditText_id" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:background="@null" android:ems="10" android:hint="密碼" android:password="true" /> </LinearLayout> <ImageView android:layout_width="match_parent" android:layout_height="1dp" android:layout_marginTop="10dp" android:background="#bababa" /> <Button android:id="@+id/dialog_logout_button_id" android:layout_width="match_parent" android:layout_height="45dp" android:background="@drawable/layout_selector" android:gravity="center_horizontal" android:text="確定" android:textColor="#535252" android:textSize="20sp" /> </LinearLayout> </RelativeLayout>
MainActivity.java
package com.kale.dialog; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; public class MainActivity extends Activity { DialogManager dm; String msg = "內容"; String[] str = new String[] { "android", "java", "ios" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); dm = new DialogManager(this); } public void buttonListener(View v) { dm = new DialogManager(this); switch (v.getId()) { case R.id.simple_button_id: dm.simpleDialog("最簡單的對話框", msg); break; case R.id.list_button_id: dm.listDialog("列表對話框", str); break; case R.id.singleChoice_button_id: dm.singleChoiceDialog("單選對話框", str); break; case R.id.multiChoice_button_id: dm.MultiChoiceDialog("多選對話框", str); break; case R.id.adapter_button_id: dm.adapterDialog("用適配器建立的對話框", str); break; case R.id.view_button_id: dm.viewDialog("采用自定義視圖的對話框"); break; case R.id.progress_button_id: dm.progressDialog("含進度條的對話框",msg); break; case R.id.activity_button_id: startActivity(new Intent(MainActivity.this,DialogActivity.class)); break; case R.id.popup_button_id: dm.popupWindowDialog("PopupWindows對話框", v); break; case R.id.date_button_id: dm.dateDialog(); break; case R.id.time_button_id: dm.timeDialog(); break; default: break; } } }
現在我們分步講解下各種對話框:
首先是一個公用的初始化設置和監聽器設置
private Context mContext; private AlertDialog.Builder builder; public DialogManager(Context context) { mContext = context; builder = new AlertDialog.Builder(mContext); } /** * 設置對話框的標題+圖標+按鈕 * * @param title */ private void setButton(String title) { builder.setTitle(title).setIcon(R.drawable.ic_launcher) .setPositiveButton("好", new positiveListener()) .setNeutralButton("中", new NeutralListener()) .setNegativeButton("差", new NegativeListener()); // .setCancelable(false);//設置點擊空白處,不能消除該對話框 } /** * @author:Jack Tony * @tips : 監聽器 * @date :2014-7-25 */ private class positiveListener implements DialogInterface.OnClickListener { @Override public void onClick(DialogInterface dialog, int which) { // dialog.dismiss();//設置對話框強制退出 showToast("好"); } } private class NeutralListener implements DialogInterface.OnClickListener { @Override public void onClick(DialogInterface dialog, int which) { showToast("中"); } } private class NegativeListener implements DialogInterface.OnClickListener { @Override public void onClick(DialogInterface dialog, int which) { showToast("差"); } } private void showToast(String msg) { Toast.makeText(mContext, msg, 0).show(); }
簡易對話框
/** * 簡易對話框 * * @param title * @param msg */ public void simpleDialog(String title, String msg) { setButton(title); builder.setMessage(msg).create().show(); }
列表對話框
/** * 列表對話框 * * @param title * @param str */ public void listDialog(String title, final String[] str) { setButton(title); // 設置了列表就不能設置內容了,否則就會出問題 builder.setItems(str, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { showToast("選中了:" + str[which]); } }).create().show(); }
單選對話框
/** * 單選對話框 * * @param title * @param str */ public void singleChoiceDialog(String title, final String[] str) { setButton(title); builder // 設置選中了第二項 .setSingleChoiceItems(str, 1, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { showToast("選中了:" + str[which]); } }).create().show(); }
多選對話框
/** * 多選對話框 * * @param title * @param str */ public void MultiChoiceDialog(String title, final String[] str) { setButton(title); builder // 默認選中幾項 .setMultiChoiceItems(str, new boolean[] { true, false, true }, new OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { showToast("你選擇的id為" + which + " , " + "選中了:" + str[which]); } }).create().show(); }
適配器對話框(可以用各種適配器,比如SimpleAdapter)
/** * 適配器對話框 * * @param title * @param str */ public void adapterDialog(String title, final String[] str) { setButton(title); builder.setAdapter( new ArrayAdapter<String>(mContext, android.R.layout.simple_list_item_multiple_choice, str), new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { showToast("選中了:" + str[which]); } }).create().show(); }
自定義視圖的對話框
/** * 自定義視圖對話框 * * @param title */ public void viewDialog(String title) { // LayoutInflater是用來找layout文件夾下的xml布局文件,並且實例化 LayoutInflater factory = LayoutInflater.from(mContext); // 把activity_login中的控件定義在View中 View view = factory.inflate(R.layout.dialog_layout, null); // 將LoginActivity中的控件顯示在對話框中 // 獲取用戶輸入的“用戶名”,“密碼” // 注意:view.findViewById很重要,因為上面factory.inflate(R.layout.activity_login, // null)將頁面布局賦值給了view了 TextView titleTv = (TextView) view .findViewById(R.id.dialog_textView_id); titleTv.setText(title); Button btn = (Button) view.findViewById(R.id.dialog_logout_button_id); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { showToast("按下自定義視圖的按鈕了~"); } }); builder // 設定顯示的View .setView(view); // 設置dialog是否為模態,false表示模態,true表示非模態 // ab.setCancelable(false); // 對話框的創建、顯示,這里顯示的位置是在屏幕的最下面,但是很不推薦這個種做法,因為距底部有一段空隙 AlertDialog dialog = builder.create(); Window window = dialog.getWindow(); window.setGravity(Gravity.BOTTOM); // 此處可以設置dialog顯示的位置 window.setWindowAnimations(R.style.myAnimationstyle); // 添加動畫 dialog.show(); }
進度條對話框(這里可以定義顯示精准進度的、模糊進度的、圓形模糊進度的進度條)
/** * 進度條對話框 * * @param title * @param msg */ public void progressDialog(String title, String msg) { final ProgressDialog dialog = new ProgressDialog(mContext); dialog.setTitle(title); dialog.setMessage(msg); dialog.setCancelable(false);// 設置點擊空白處也不能關閉該對話框 dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); // dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);//設置采用圓形進度條 dialog.setMax(100); // dialog.setIndeterminate(true);//設置不顯示明確的進度 dialog.setIndeterminate(false);// 設置顯示明確的進度 dialog.setButton(ProgressDialog.BUTTON_POSITIVE, "確定", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { // 這里添加點擊后的邏輯 } }); dialog.setButton(ProgressDialog.BUTTON_NEUTRAL, "中立", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { // 這里添加點擊后的邏輯 } }); dialog.setButton(ProgressDialog.BUTTON_NEGATIVE, "取消", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { // 這里添加點擊后的邏輯 } }); dialog.show(); //啟動線程,模擬一個耗時的操作 new Thread(new Runnable() { @Override public void run() { int Progress = 0; while (Progress < 100) { try { Thread.sleep(100); Progress++; // dialog.setProgress(Progress); dialog.incrementProgressBy(1);// 進度條一次加10 } catch (InterruptedException e) { e.printStackTrace(); } } dialog.dismiss();// 完成后消失 } }).start(); }
用PopupWindow做的對話框,PopupWindow特別適合顯示從特定位置彈出的的菜單。我這里設置對話框是從底部彈出,用了一些動畫效果。
/** * PopupWindow做的對話框 感謝: http://www.apkbus.com/android-56965-1-1.html * http://blog.csdn.net/zhufuing/article/details/17783333 * http://www.open-open.com/lib/view/open1379383271818.html * * @param title * @param v */ public void popupWindowDialog(String title, View v) { // 裝載布局文件 View view = LayoutInflater.from(mContext).inflate( R.layout.dialog_layout, null); // 創建PopupWindow對象,添加視圖,設置寬高,最后一個參數為設置點擊屏幕空白處(按返回鍵)對話框消失。 // 也可以用.setFocusable(true);. final PopupWindow pWindow = new PopupWindow(view, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, true); pWindow.setBackgroundDrawable(new BitmapDrawable());// 為了讓對話框點擊空白處消失,必須有這條語句 pWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);// 出現輸入法時,重新布局 pWindow.setAnimationStyle(R.style.myAnimationstyle);// 設置動畫 TextView titleTv = (TextView) view .findViewById(R.id.dialog_textView_id); titleTv.setText(title); Button btn = (Button) view.findViewById(R.id.dialog_logout_button_id); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { showToast("按下PopupWindow中的按鈕了~"); pWindow.dismiss(); } }); // 用下拉方式顯示 // pWindow.showAsDropDown(v); pWindow.showAtLocation(v, Gravity.BOTTOM, 0, 0); }
動畫效果和style文件
動畫文件的目錄 res/anim
dialog_enter.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:duration="200" android:fromYDelta="100%p" android:toYDelta="0" /> </set>
dialog_exit.xml
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:duration="200" android:fromYDelta="0" android:toYDelta="50%p" /> </set>
樣式文件的目錄:values/styles.xml
<resources> <style name="myAnimationstyle" parent="android:Animation"> <item name="@android:windowEnterAnimation">@anim/dialog_enter</item> <item name="@android:windowExitAnimation">@anim/dialog_exit</item> </style> </resources>
日期對話框
/** * 日期對話框 */ public void dateDialog() { Calendar c = Calendar.getInstance(); DatePickerDialog dialog = new DatePickerDialog(mContext, new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker dp, int year, int month, int dayOfMonth) { showToast(year + "-" + (month + 1) + "-" + dayOfMonth); } }, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH)); dialog.show(); }
時間對話框
/** * 時間對話框 */ public void timeDialog() { Calendar c = Calendar.getInstance(); new TimePickerDialog(mContext, new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker arg0, int hourOfDay, int minute) { showToast(hourOfDay + ":" + minute); } }, c.get(Calendar.HOUR_OF_DAY), c.get(Calendar.MINUTE), true) .show(); }
用Activit做的對話框
DialogActivity.java
package com.kale.dialog; import android.app.Activity; import android.os.Bundle; public class DialogActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.dialog_layout); } }
首先,定義風格
<!-- android Dialog去掉標題欄 和邊框 --> <style name="myDialogTheme" parent="android:Theme.Dialog"> <item name="android:windowFrame">@null</item><!--邊框--> <item name="android:windowIsFloating">true</item><!--是否浮現在activity之上--> <item name="android:windowIsTranslucent">true</item> <!-- 是否透明 --> <item name="android:windowNoTitle">true</item><!--除去title--> <item name="android:windowContentOverlay">@null</item> <!-- 對話框是否有遮蓋 --> <item name="android:backgroundDimEnabled">false</item><!-- 不允許對話框的背景變暗 --> <item name="android:windowBackground">@null</item><!--除去背景色--> </style>
然后,在AndroidManifest.xml中給activity設置風格
<activity android:name="com.kale.dialog.DialogActivity" android:theme="@style/myDialogTheme"> </activity>
最后,啟動這個activity即可
startActivity(new Intent(MainActivity.this,DialogActivity.class));
下面是DialogManager.java工具類的全部代碼
package com.kale.dialog; import java.util.Calendar; import android.app.AlertDialog; import android.app.DatePickerDialog; import android.app.ProgressDialog; import android.app.TimePickerDialog; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.DialogInterface.OnMultiChoiceClickListener; import android.graphics.drawable.BitmapDrawable; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup.LayoutParams; import android.view.Window; import android.view.WindowManager; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.DatePicker; import android.widget.PopupWindow; import android.widget.TextView; import android.widget.TimePicker; import android.widget.Toast; public class DialogManager { private Context mContext; private AlertDialog.Builder builder; public DialogManager(Context context) { mContext = context; builder = new AlertDialog.Builder(mContext); } /** * 簡易對話框 * * @param title * @param msg */ public void simpleDialog(String title, String msg) { setButton(title); builder.setMessage(msg).create().show(); } /** * 列表對話框 * * @param title * @param str */ public void listDialog(String title, final String[] str) { setButton(title); // 設置了列表就不能設置內容了,否則就會出問題 builder.setItems(str, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { showToast("選中了:" + str[which]); } }).create().show(); } /** * 單選對話框 * * @param title * @param str */ public void singleChoiceDialog(String title, final String[] str) { setButton(title); builder // 設置選中了第二項 .setSingleChoiceItems(str, 1, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { showToast("選中了:" + str[which]); } }).create().show(); } /** * 多選對話框 * * @param title * @param str */ public void MultiChoiceDialog(String title, final String[] str) { setButton(title); builder // 默認選中幾項 .setMultiChoiceItems(str, new boolean[] { true, false, true }, new OnMultiChoiceClickListener() { @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { showToast("你選擇的id為" + which + " , " + "選中了:" + str[which]); } }).create().show(); } /** * 適配器對話框 * * @param title * @param str */ public void adapterDialog(String title, final String[] str) { setButton(title); builder.setAdapter( new ArrayAdapter<String>(mContext, android.R.layout.simple_list_item_multiple_choice, str), new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { showToast("選中了:" + str[which]); } }).create().show(); } /** * 自定義視圖對話框 * * @param title */ public void viewDialog(String title) { // LayoutInflater是用來找layout文件夾下的xml布局文件,並且實例化 LayoutInflater factory = LayoutInflater.from(mContext); // 把activity_login中的控件定義在View中 View view = factory.inflate(R.layout.dialog_layout, null); // 將LoginActivity中的控件顯示在對話框中 // 獲取用戶輸入的“用戶名”,“密碼” // 注意:view.findViewById很重要,因為上面factory.inflate(R.layout.activity_login, // null)將頁面布局賦值給了view了 TextView titleTv = (TextView) view .findViewById(R.id.dialog_textView_id); titleTv.setText(title); Button btn = (Button) view.findViewById(R.id.dialog_logout_button_id); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { showToast("按下自定義視圖的按鈕了~"); } }); builder // 設定顯示的View .setView(view); // 設置dialog是否為模態,false表示模態,true表示非模態 // ab.setCancelable(false); // 對話框的創建、顯示,這里顯示的位置是在屏幕的最下面,但是很不推薦這個種做法,因為距底部有一段空隙 AlertDialog dialog = builder.create(); Window window = dialog.getWindow(); window.setGravity(Gravity.BOTTOM); // 此處可以設置dialog顯示的位置 window.setWindowAnimations(R.style.myAnimationstyle); // 添加動畫 dialog.show(); } /** * 進度條對話框 * * @param title * @param msg */ public void progressDialog(String title, String msg) { final ProgressDialog dialog = new ProgressDialog(mContext); dialog.setTitle(title); dialog.setMessage(msg); dialog.setCancelable(false);// 設置點擊空白處也不能關閉該對話框 dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); // dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);//設置采用圓形進度條 dialog.setMax(100); // dialog.setIndeterminate(true);//設置不顯示明確的進度 dialog.setIndeterminate(false);// 設置顯示明確的進度 dialog.setButton(ProgressDialog.BUTTON_POSITIVE, "確定", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { // 這里添加點擊后的邏輯 } }); dialog.setButton(ProgressDialog.BUTTON_NEUTRAL, "中立", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { // 這里添加點擊后的邏輯 } }); dialog.setButton(ProgressDialog.BUTTON_NEGATIVE, "取消", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { // 這里添加點擊后的邏輯 } }); dialog.show(); //啟動線程,模擬一個耗時的操作 new Thread(new Runnable() { @Override public void run() { int Progress = 0; while (Progress < 100) { try { Thread.sleep(100); Progress++; // dialog.setProgress(Progress); dialog.incrementProgressBy(1);// 進度條一次加10 } catch (InterruptedException e) { e.printStackTrace(); } } dialog.dismiss();// 完成后消失 } }).start(); } /** * PopupWindow做的對話框 感謝: http://www.apkbus.com/android-56965-1-1.html * http://blog.csdn.net/zhufuing/article/details/17783333 * http://www.open-open.com/lib/view/open1379383271818.html * * @param title * @param v */ public void popupWindowDialog(String title, View v) { // 裝載布局文件 View view = LayoutInflater.from(mContext).inflate( R.layout.dialog_layout, null); // 創建PopupWindow對象,添加視圖,設置寬高,最后一個參數為設置點擊屏幕空白處(按返回鍵)對話框消失。 // 也可以用.setFocusable(true);. final PopupWindow pWindow = new PopupWindow(view, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, true); pWindow.setBackgroundDrawable(new BitmapDrawable());// 為了讓對話框點擊空白處消失,必須有這條語句 pWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);// 出現輸入法時,重新布局 pWindow.setAnimationStyle(R.style.myAnimationstyle);// 設置動畫 TextView titleTv = (TextView) view .findViewById(R.id.dialog_textView_id); titleTv.setText(title); Button btn = (Button) view.findViewById(R.id.dialog_logout_button_id); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { showToast("按下PopupWindow中的按鈕了~"); pWindow.dismiss(); } }); // 用下拉方式顯示 // pWindow.showAsDropDown(v); pWindow.showAtLocation(v, Gravity.BOTTOM, 0, 0); } /** * 日期對話框 */ public void dateDialog() { Calendar c = Calendar.getInstance(); DatePickerDialog dialog = new DatePickerDialog(mContext, new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker dp, int year, int month, int dayOfMonth) { showToast(year + "-" + (month + 1) + "-" + dayOfMonth); } }, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH)); dialog.show(); } /** * 時間對話框 */ public void timeDialog() { Calendar c = Calendar.getInstance(); new TimePickerDialog(mContext, new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker arg0, int hourOfDay, int minute) { showToast(hourOfDay + ":" + minute); } }, c.get(Calendar.HOUR_OF_DAY), c.get(Calendar.MINUTE), true) .show(); } /** * 設置對話框的標題+圖標+按鈕 * * @param title */ private void setButton(String title) { builder.setTitle(title).setIcon(R.drawable.ic_launcher) .setPositiveButton("好", new positiveListener()) .setNeutralButton("中", new NeutralListener()) .setNegativeButton("差", new NegativeListener()); // .setCancelable(false);//設置點擊空白處,不能消除該對話框 } /** * @author:Jack Tony * @tips : 監聽器 * @date :2014-7-25 */ private class positiveListener implements DialogInterface.OnClickListener { @Override public void onClick(DialogInterface dialog, int which) { // dialog.dismiss();//設置對話框強制退出 showToast("好"); } } private class NeutralListener implements DialogInterface.OnClickListener { @Override public void onClick(DialogInterface dialog, int which) { showToast("中"); } } private class NegativeListener implements DialogInterface.OnClickListener { @Override public void onClick(DialogInterface dialog, int which) { showToast("差"); } } private void showToast(String msg) { Toast.makeText(mContext, msg, 0).show(); } }