您的位置:首页 > 移动开发 > Android开发

常用Android对话框的封装

2013-09-22 18:00 316 查看
休息无聊,封装了下android常用的对话框,贴到网上方便大家使用,先看下效果图:







简单确定框 简单信息框 三按钮对话框







单选框 多选框 列表选择框







时间选择框 日期选择框 进度条对话框

下面编写主要代码,比较简单,点击对话框按钮时会相应回调函数,在回调函数中处理对应的逻辑。此处也可以直接传入监听器,在监听器中编写业务逻辑。

此处我们用第一种方法。

首先,编写回调函数接口:

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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: