常用Android对话框的封装
2013-09-22 18:00
316 查看
休息无聊,封装了下android常用的对话框,贴到网上方便大家使用,先看下效果图:
简单确定框 简单信息框 三按钮对话框
单选框 多选框 列表选择框
时间选择框 日期选择框 进度条对话框
下面编写主要代码,比较简单,点击对话框按钮时会相应回调函数,在回调函数中处理对应的逻辑。此处也可以直接传入监听器,在监听器中编写业务逻辑。
此处我们用第一种方法。
首先,编写回调函数接口:
接下来编写对话框类,包含各类对话框:
最后,在activity主线程中处理业务逻辑。也可以将回调函数放在其他的类中:
代码比较简单,可以根据需要自行修改,但注意Android中与用户交互的对话框,Toast等必须放在UI主线程中,对于子线程,需要和用户交互时。可通过广播或Handler等更新UI。
最后,附上完整代码下载地址:http://download.csdn.net/detail/u010538765/6303059。
简单确定框 简单信息框 三按钮对话框
单选框 多选框 列表选择框
时间选择框 日期选择框 进度条对话框
下面编写主要代码,比较简单,点击对话框按钮时会相应回调函数,在回调函数中处理对应的逻辑。此处也可以直接传入监听器,在监听器中编写业务逻辑。
此处我们用第一种方法。
首先,编写回调函数接口:
public interface Callback { // 确定按钮回调函数 public void onPositiveButton(); // 中间按钮回调函数 public void onNeutralButton(); // 取消按钮回调函数 public void onNegativeButton(); // 参数中获得相应返回值 public void onGetReturnValue(ArrayList<Object> ReturnValues); }
接下来编写对话框类,包含各类对话框:
public class DialogManager { private Context mContext = null; private int mSingleChoiceID = -1; private Dialog mDialog = null; private ProgressDialog mProgressDialog = null; private ArrayList<Integer> MultiChoiceID = null; private ArrayList<Object> returnValues = null; private int mYear = 0; private int mMonth = 0; private int mDay = 0; private int mHour = 0; private int mMinute = 0; public DialogManager(Context context) { this.mContext = context; } /** * 简单确定对话框 * @param title * @param msg * @param btnPositiveName * @param isCancelable * @param callback * @return */ public Dialog showConfirmDialog( String title, String msg, String btnPositiveName, boolean isCancelable, final Callback callback) { AlertDialog.Builder builder = new Builder(mContext); builder.setTitle(title); builder.setMessage(msg); builder.setCancelable(isCancelable); builder.setPositiveButton(btnPositiveName, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { callback.onPositiveButton(); mDialog.dismiss(); } }); mDialog = builder.create(); mDialog.show(); return mDialog; } /** * 简单信息提示框 * @param title * @param msg * @param btnPositiveName * @param btnNegativeName * @param isCancelable * @param callback * @return * @author Jacky */ public Dialog showMsgDialog( String title, String msg, String btnPositiveName, String btnNegativeName, boolean isCancelable, final Callback callback) { AlertDialog.Builder builder = new Builder(mContext); builder.setTitle(title); builder.setMessage(msg); builder.setCancelable(isCancelable); builder.setPositiveButton(btnPositiveName, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { callback.onPositiveButton(); mDialog.dismiss(); } }); // 取消 builder.setNegativeButton(btnNegativeName, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { callback.onNegativeButton(); mDialog.dismiss(); } }); mDialog = builder.create(); mDialog.show(); return mDialog; } /** * 有三个按钮的对话框 * @param title * @param msg * @param btnPositiveName * @param btnNeutralName * @param btnNegativeName * @param isCancelable * @param callback * @return * @author Jacky */ public Dialog showThreeBtnDialog( String title, String msg, String btnPositiveName, String btnNeutralName, String btnNegativeName, boolean isCancelable, final Callback callback) { AlertDialog.Builder builder = new Builder(mContext); builder.setTitle(title); builder.setMessage(msg); builder.setCancelable(isCancelable); // 左侧按钮 builder.setPositiveButton(btnPositiveName, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { callback.onPositiveButton(); mDialog.dismiss(); } }); // 中间按钮 builder.setNeutralButton(btnNeutralName, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { callback.onNeutralButton(); mDialog.dismiss(); } }); // 右侧按钮 builder.setNegativeButton(btnNegativeName, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { callback.onNegativeButton(); mDialog.dismiss(); } }); mDialog = builder.create(); mDialog.show(); return mDialog; } /** * 单项选择框 * @param title * @param mItems * @param btnPositiveName * @param btnNegativeName * @param isCancelable * @param callback * @return * @author Jacky */ public Dialog showSingleChoiceDialog( String title, final String[] mItems, String btnPositiveName, String btnNegativeName, boolean isCancelable, final Callback callback) { AlertDialog.Builder builder = new AlertDialog.Builder(mContext); builder.setTitle(title); builder.setCancelable(isCancelable); builder.setSingleChoiceItems(mItems, 0, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { mSingleChoiceID = whichButton; } }); builder.setPositiveButton(btnPositiveName, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { returnValues = new ArrayList<Object>(); returnValues.add(mItems[mSingleChoiceID]); callback.onGetReturnValue(returnValues); mDialog.dismiss(); } }); builder.setNegativeButton(btnNegativeName, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { callback.onNegativeButton(); mDialog.dismiss(); } }); mDialog = builder.create(); mDialog.show(); return mDialog; } /** * 列表选择框 * @param title * @param mItems * @param isCancelable * @param callback * @return * @author Jacky */ public Dialog showListDialog( String title, final String[] mItems, boolean isCancelable, final Callback callback) { AlertDialog.Builder builder = new AlertDialog.Builder(mContext); builder.setTitle(title); builder.setCancelable(isCancelable); builder.setItems(mItems, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { returnValues = new ArrayList<Object>(); returnValues.add(mItems[which]); callback.onGetReturnValue(returnValues); mDialog.dismiss(); } }); mDialog = builder.create(); mDialog.show(); return mDialog; } /** * 多选对话框 * @param title * @param mItems * @param btnPositiveName * @param btnNegativeName * @param isCancelable * @param callback * @return * @author Jacky */ public Dialog showMultiChoiceDialog( String title, final String[] mItems, String btnPositiveName, String btnNegativeName, boolean isCancelable, final Callback callback) { MultiChoiceID = new ArrayList<Integer>(); AlertDialog.Builder builder = new AlertDialog.Builder(mContext); builder.setTitle(title); builder.setCancelable(isCancelable); builder.setMultiChoiceItems(mItems, new boolean[mItems.length], new DialogInterface.OnMultiChoiceClickListener() { public void onClick(DialogInterface dialog, int whichButton, boolean isChecked) { if(isChecked) { MultiChoiceID.add(whichButton); } else { /*ArrayList 的 remove() 函数有两个重载版本,一个参数为要删除的位置,一个参数为要删除的对象 * 此处若不提示系统调用的参数为对象时,有有时调用另一个版本,可能会导致越界错误,要注意*/ MultiChoiceID.remove((Integer)whichButton); } } }); builder.setPositiveButton(btnPositiveName, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { returnValues = new ArrayList<Object>(); int size = MultiChoiceID.size(); for (int i = 0 ;i < size; i++) { returnValues.add(mItems[MultiChoiceID.get(i)]); } callback.onGetReturnValue(returnValues); mDialog.dismiss(); } }); builder.setNegativeButton(btnNegativeName, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { callback.onNegativeButton(); mDialog.dismiss(); } }); mDialog = builder.create(); mDialog.show(); return mDialog; } /** * 显示进度条对话框 * @param title * @param msg * @param btnName * @param isCancelable * @param callback * @return * @author Jacky */ public ProgressDialog showProgressDialog( String title, String msg, String btnNegativeName, boolean isCancelable, final Callback callback) { mProgressDialog = new ProgressDialog(mContext); mProgressDialog.setTitle(title); mProgressDialog.setMessage(msg); mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); mProgressDialog.setCancelable(isCancelable); mProgressDialog.setButton(ProgressDialog.BUTTON_NEGATIVE, btnNegativeName, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { callback.onNegativeButton(); mProgressDialog.dismiss(); } }); mProgressDialog.show(); return mProgressDialog; } /** * 日期选择提示框 * @param title * @param year * @param month * @param day * @param btnPositiveName * @param btnNegativeName * @param isCancelable * @param callback * @return * @author Jacky */ public DatePickerDialog showDatePickerDialog( String title, String btnPositiveName, String btnNegativeName, boolean isCancelable, final Callback callback) { Calendar mCalendar = Calendar.getInstance(); final DatePickerDialog mDatePickerDialog = new DatePickerDialog( mContext, new OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear,int dayOfMonth) { returnValues = new ArrayList<Object>(); returnValues.add(format(year)); returnValues.add(format(monthOfYear + 1)); returnValues.add(format(dayOfMonth)); callback.onGetReturnValue(returnValues); } }, mCalendar.get(mCalendar.YEAR), mCalendar.get(mCalendar.MONTH), mCalendar.get(mCalendar.DAY_OF_MONTH)); mDatePickerDialog.setTitle(title); mDatePickerDialog.setCancelable(isCancelable); mDatePickerDialog.show(); return mDatePickerDialog; } /** * 时间选择对话框 * @param title * @param hour * @param minute * @param is24Hour * @param btnPositiveName * @param btnNegativeName * @param isCancelable * @param callback * @return * @author Jacky */ public TimePickerDialog showTimerPickerDialog( String title, int paramHour, int prarmMinute, boolean is24Hour, String btnPositiveName, String btnNegativeName, boolean isCancelable, final Callback callback) { final TimePickerDialog mTimerPickerDialog = new TimePickerDialog( mContext, new OnTimeSetListener() { @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { returnValues = new ArrayList<Object>(); returnValues.add(format(hourOfDay)); returnValues.add(format(minute)); callback.onGetReturnValue(returnValues); } }, paramHour, prarmMinute, is24Hour); mTimerPickerDialog.setTitle(title); mTimerPickerDialog.setCancelable(isCancelable); mTimerPickerDialog.show(); return mTimerPickerDialog; } /** * 转换日期时间格式 * @param original * @return */ private String format(int original) { String str = "" + original; if(1 == str.length()) { str = "0" + str; } return str; } }
最后,在activity主线程中处理业务逻辑。也可以将回调函数放在其他的类中:
public class MainActivity extends Activity { private Button mConfirmDialogBtn = null; private Button mMsgDialogBtn = null; private Button mProgressDialogBtn = null; private Button mThreeBtnDialogBtn = null; private Button mSingleChoiceDialogBtn = null; private Button mMultiChoiceDialogBtn = null; private Button mListDialogBtn = null; private Button mDatePickerDialogBtn = null; private Button mTimePickerDialogBtn = null; private Button mCustomDialogBtn = null; private DialogManager mDialogManager = null; private Dialog mMsgDialog = null; private Dialog mConfirmDialog = null; private Dialog mThreeBtnDialog = null; private Dialog mSingleChoiceDialog = null; private Dialog mListDialog = null; private Dialog mMultiChoiceDialog = null; private ProgressDialog mProgressDialog = null; private DatePickerDialog mDatePickerDialog = null; private TimePickerDialog mTimePickerDialog = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mDialogManager = new DialogManager(MainActivity.this); mConfirmDialogBtn = (Button) findViewById(R.id.confirmDialogBtn); mMsgDialogBtn = (Button) findViewById(R.id.msgDialogBtn); mThreeBtnDialogBtn = (Button) findViewById(R.id.ThreeBtnDialogBtn); mSingleChoiceDialogBtn = (Button) findViewById(R.id.SingleChoiceDialogBtn); mMultiChoiceDialogBtn = (Button) findViewById(R.id.MultiChoiceDialogBtn); mListDialogBtn = (Button) findViewById(R.id.ListDialogBtn); mProgressDialogBtn = (Button) findViewById(R.id.progressDialogBtn); mDatePickerDialogBtn = (Button) findViewById(R.id.DatePickerDialogBtn); mTimePickerDialogBtn = (Button) findViewById(R.id.TimePickerDialogBtn); mCustomDialogBtn = (Button) findViewById(R.id.confirmDialogBtn); /*简单确定框*/ mConfirmDialogBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mConfirmDialog = mDialogManager.showConfirmDialog("提示", "简单确定框", "确定", true, new MyConfirmDialogCallback()); } }); // /*简单信息框*/ mMsgDialogBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mMsgDialog = mDialogManager.showMsgDialog("提示", "简单信息框", "确定", "取消", true, new MyMsgDialogCallback()); } }); /*三按钮对话框*/ mThreeBtnDialogBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mThreeBtnDialog = mDialogManager.showThreeBtnDialog("提示", "请选择", "确定", "中立", "取消", true, new MyThreeBtnDialogCallback()); } }); /*单选对话框*/ mSingleChoiceDialogBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String[] mItems = new String[]{"关羽", "赵云", "张飞", "马超" ,"黄忠"}; mSingleChoiceDialog = mDialogManager.showSingleChoiceDialog("提示", mItems, "确定", "取消", true, new MySingleChoiceDialogCallback()); } }); /*多选对话框*/ mMultiChoiceDialogBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String[] mItems = new String[]{"关羽", "赵云", "张飞", "马超" ,"黄忠"}; mMultiChoiceDialog = mDialogManager.showMultiChoiceDialog("提示", mItems, "确定", "取消", true, new MyMultiChoiceDialogCallback()); } }); /*列表对话框*/ mListDialogBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String[] mItems = new String[]{"关羽", "赵云", "张飞", "马超" ,"黄忠"}; mListDialog = mDialogManager.showListDialog("提示", mItems, true, new MyListDialogCallback()); } }); /*进度条对话框*/ mProgressDialogBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { mProgressDialog = mDialogManager.showProgressDialog("进度条提示框", "可以点击取消", "取消", true, new MyProgressCallback()); mProgressDialog.setMax(100); new Thread(new Runnable() { int progress = 0; @Override public void run() { for (;progress <= 100; progress += 10) { Message msg = new Message(); msg.what = 0x0001; msg.obj = progress; mHandler.sendMessage(msg); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } } }).start(); } }); /*日期对话框*/ mDatePickerDialogBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mDatePickerDialog = mDialogManager.showDatePickerDialog("设置日期", "设置", "取消", true, new MyDatePickerDialogCallback()); } }); /*时间对话框*/ mTimePickerDialogBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { mTimePickerDialog = mDialogManager.showTimerPickerDialog("设置时间", 00, 00, true, "设置", "取消", true, new MyTimePickerDialogCallback()); } }); // /*自定义对话框*/ // mCustomDialogBtn.setOnClickListener(new OnClickListener() // { // @Override // public void onClick(View v) // { // } // }); } Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch(msg.what) { case 0x0001: mProgressDialog.setProgress((Integer)msg.obj); break; default: } } }; /*定义简单信息对话框回调函数*/ class MyMsgDialogCallback implements Callback { @Override public void onPositiveButton() { Toast.makeText(getApplicationContext(), "您点击了确定", Toast.LENGTH_LONG).show(); } @Override public void onNeutralButton() {} @Override public void onNegativeButton() { Toast.makeText(getApplicationContext(), "您点击了取消", Toast.LENGTH_LONG).show(); } @Override public void onGetReturnValue(ArrayList<Object> ReturnValues) {} } /*定义简单确定对话框回调函数*/ class MyConfirmDialogCallback implements Callback { @Override public void onPositiveButton() { Toast.makeText(getApplicationContext(), "您点击了确定", Toast.LENGTH_LONG).show(); } @Override public void onNeutralButton() {} @Override public void onNegativeButton() {} @Override public void onGetReturnValue(ArrayList<Object> ReturnValues) {} } /*定义三按钮对话框回调函数*/ class MyThreeBtnDialogCallback implements Callback { @Override public void onPositiveButton() { Toast.makeText(getApplicationContext(), "您点击了确定", Toast.LENGTH_LONG).show(); } @Override public void onNeutralButton() { Toast.makeText(getApplicationContext(), "您点击了中立", Toast.LENGTH_LONG).show(); } @Override public void onNegativeButton() { Toast.makeText(getApplicationContext(), "您点击了取消", Toast.LENGTH_LONG).show(); } @Override public void onGetReturnValue(ArrayList<Object> ReturnValues) {} } /*定义单选对话框回调函数*/ class MySingleChoiceDialogCallback implements Callback { @Override public void onPositiveButton() { Toast.makeText(getApplicationContext(), "您点击了确定", Toast.LENGTH_LONG).show(); } @Override public void onNeutralButton() {} @Override public void onNegativeButton() { Toast.makeText(getApplicationContext(), "您点击了取消", Toast.LENGTH_LONG).show(); } @Override public void onGetReturnValue(ArrayList<Object> ReturnValues) { String returnValue = (String) ReturnValues.get(0); Toast.makeText(getApplicationContext(), returnValue, Toast.LENGTH_LONG).show(); } } /*定义多选对话框回调函数*/ class MyMultiChoiceDialogCallback implements Callback { @Override public void onPositiveButton() { Toast.makeText(getApplicationContext(), "您点击了确定", Toast.LENGTH_LONG).show(); } @Override public void onNeutralButton() {} @Override public void onNegativeButton() { Toast.makeText(getApplicationContext(), "您点击了取消", Toast.LENGTH_LONG).show(); } @Override public void onGetReturnValue(ArrayList<Object> ReturnValues) { int count = ReturnValues.size(); String strReturnValue = ""; for (int i = 0; i < count - 1; i++) { strReturnValue += ReturnValues.get(i) + "\n"; } strReturnValue += ReturnValues.get(count - 1); Toast.makeText(getApplicationContext(), strReturnValue, Toast.LENGTH_LONG).show(); } } /*定义列表对话框回调函数*/ class MyListDialogCallback implements Callback { @Override public void onPositiveButton() {} @Override public void onNeutralButton() {} @Override public void onNegativeButton() {} @Override public void onGetReturnValue(ArrayList<Object> ReturnValues) { String returnValue = (String) ReturnValues.get(0); Toast.makeText(getApplicationContext(), returnValue, Toast.LENGTH_LONG).show(); } } /*定义进度条对话框回调函数*/ class MyProgressCallback implements Callback { @Override public void onPositiveButton() { } @Override public void onNeutralButton() { } @Override public void onNegativeButton() { Toast.makeText(getApplicationContext(), "您点击了取消", Toast.LENGTH_LONG).show(); } @Override public void onGetReturnValue(ArrayList<Object> ReturnValues) { } } /*定义日期对话框回调函数*/ class MyDatePickerDialogCallback implements Callback { @Override public void onPositiveButton() { } @Override public void onNeutralButton() { } @Override public void onNegativeButton() { Toast.makeText(getApplicationContext(), "您点击了取消", Toast.LENGTH_LONG).show(); } @Override public void onGetReturnValue(ArrayList<Object> ReturnValues) { int count = ReturnValues.size(); String strReturnValue = ""; for (int i = 0; i < count - 1; i++) { strReturnValue += ReturnValues.get(i) + "-"; } strReturnValue += ReturnValues.get(count - 1); Toast.makeText(getApplicationContext(), strReturnValue, Toast.LENGTH_LONG).show(); } } /*定义时间对话框回调函数*/ class MyTimePickerDialogCallback implements Callback { @Override public void onPositiveButton() { } @Override public void onNeutralButton() { } @Override public void onNegativeButton() { Toast.makeText(getApplicationContext(), "您点击了取消", Toast.LENGTH_LONG).show(); } @Override public void onGetReturnValue(ArrayList<Object> ReturnValues) { int count = ReturnValues.size(); String strReturnValue = ""; for (int i = 0; i < count - 1; i++) { strReturnValue += ReturnValues.get(i) + ":"; } strReturnValue += ReturnValues.get(count - 1); Toast.makeText(getApplicationContext(), strReturnValue, Toast.LENGTH_LONG).show(); } } /*自定义对话框回调函数*/ class MyCustomDialogCallback implements Callback { @Override public void onPositiveButton() { } @Override public void onNeutralButton() { } @Override public void onNegativeButton() { Toast.makeText(getApplicationContext(), "您点击了取消", Toast.LENGTH_LONG).show(); } @Override public void onGetReturnValue(ArrayList<Object> ReturnValues) { } } }
代码比较简单,可以根据需要自行修改,但注意Android中与用户交互的对话框,Toast等必须放在UI主线程中,对于子线程,需要和用户交互时。可通过广播或Handler等更新UI。
最后,附上完整代码下载地址:http://download.csdn.net/detail/u010538765/6303059。
相关文章推荐
- android常用对话框封装
- Android 常用对话框Dialog封装
- android常用对话框封装
- 将常用的Android adb shell 命令行封装为C#静态函数
- 一个android自定义对话框的封装
- 常用的android弹出对话框
- 常用的android弹出对话框
- 常用的android弹出对话框
- 常用的android弹出对话框 几乎包含了所有(1)
- Android常用对话框使用大全
- Android 封装实现各种样式对话框
- Android常用对话框大全——Dialog
- Android知识点之网络底层封装:细数常用的网络请求框架
- Android BaseActivity、BaseFragment等 常用方法封装
- Android常用的AlertDialog对话框及自定义对话框
- 常用的android弹出对话框
- 常用的android弹出对话框
- android常用封装 --- BaseFragment
- Android常用控件-DatePicker以及对话框的两种使用方法
- 常用的android弹出对话框