类AlertDialogSamples展示各种形态的dilalog
在各个按钮的click函数中,调用showDialog。然后重写activity的onCreateDialog方法来弹出dialog
传入参数为dialog id
下面分别分析
1、OK Cancel dialog with a message
yes/no类型的dialog。
setPositiveButton方法第一个参数是按钮文字id,爹热参数是按钮按下的监听。这里处理ok事件
类似的,setNegativeButton方法处理cancel事件
new AlertDialog.Builder(AlertDialogSamples.this) .setIcon(R.drawable.alert_dialog_icon) .setTitle(R.string.alert_dialog_two_buttons_title) .setPositiveButton(R.string.alert_dialog_ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { /* User clicked OK so do some stuff */ } }) .setNegativeButton(R.string.alert_dialog_cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { /* User clicked Cancel so do some stuff */ } }) .create();2、OK Cancel dialog with a long message
除了设置dialog的title外,还设置了Message属性
setMessage(R.string.alert_dialog_two_buttons2_msg)
经过测试发现,dialog弹出后,可以修改title,却不能修改message
设置了setNeutralButton方法,这样,画面上有了三个按钮:ok,something,cancel
3、List dialog
设置了dialog的item属性。
new AlertDialog.Builder(AlertDialogSamples.this) .setTitle(R.string.select_dialog) .setItems(R.array.select_dialog_items, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { /* User clicked so do some stuff */ String[] items = getResources().getStringArray(R.array.select_dialog_items); new AlertDialog.Builder(AlertDialogSamples.this) .setMessage("You selected: " + which + " , " + items[which]) .show(); } })
<string-array name="select_dialog_items"> <item>Command one</item> <item>Command two</item> <item>Command three</item> <item>Command four</item> </string-array>点击某个item后,根据传入的which参数,判断点击的是第几个item,来作出动作。
4、Progress dialog
Progress dialog有2种形态,STYLE_HORIZONTAL是进度条式,STYLE_SPINNER是一个不停旋转的圈
可以设置setMax来表示进度条的最大数值,本例是100
如果不能确定执行的具体时间,可以设置setIndeterminate,让进度条变成时间不定的状态,对于STYLE_HORIZONTAL,就是一个进度块左右滑动。
mProgressDialog = new ProgressDialog(AlertDialogSamples.this); mProgressDialog.setIcon(R.drawable.alert_dialog_icon); mProgressDialog.setTitle(R.string.select_dialog); mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); mProgressDialog.setMax(MAX_PROGRESS);
mProgressHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); if (mProgress >= MAX_PROGRESS) { mProgressDialog.dismiss(); } else { mProgress++; mProgressDialog.incrementProgressBy(1); mProgressHandler.sendEmptyMessageDelayed(0, 100); } } };
5、Single choice list
和上面的setItems类似,不过这里设置setSingleChoiceItems
<string-array name="select_dialog_items2"> <item>Map</item> <item>Satellite</item> <item>Traffic</item> <item>Street view</item> </string-array>和list类型一样,监听函数的whichButton参数表示选择项目的index。下面可以验证这个结论
setSingleChoiceItems(R.array.select_dialog_items2, 0, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { /* User clicked on a radio button do some stuff */ String[] items = getResources().getStringArray(R.array.select_dialog_items2); new AlertDialog.Builder(AlertDialogSamples.this) .setMessage("You selected: " + whichButton + " , " + items[whichButton]) .show(); } })
使用函数setMultiChoiceItems设置checkbox类型的dialog。
第二个参数设置默认选择值
new boolean[]{false, true, false, true, false, false, false}
第三个参数表示被选中项目的index,第4个参数表示被选中的状态
setMultiChoiceItems(R.array.select_dialog_items3, new boolean[]{false, true, false, true, false, false, false}, new DialogInterface.OnMultiChoiceClickListener() { public void onClick(DialogInterface dialog, int whichButton, boolean isChecked) { /* User clicked on a check box do some stuff */ } })
待补充
8、Text Entry dialog
利用自定义的layout
首先从资源文件实例化layout
LayoutInflater factory = LayoutInflater.from(this); final View textEntryView = factory.inflate(R.layout.alert_dialog_text_entry, null);初始化dialog时,setView(textEntryView)
在按钮处理函数中,可以利用 textEntryView.findViewById得到自定义layout上的控件
这样就可以得到画面上的值