博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android中Dialog的使用
阅读量:4513 次
发布时间:2019-06-08

本文共 8493 字,大约阅读时间需要 28 分钟。

Dialog是android开发过程中最常用到的组件之一,它包括以下几种类型:

  1. 警告对话框:Alertialog
  2. 进度对话框:ProgressDialog
  3. 日期选择对话框:DatePickerDialog
  4. 时间选择对话框:TimePickerDialog
  5. 自定义对话框:从Dialog继承

Dialog的创建方式有两种:

一是直接new一个Dialog对象,然后调用Dialog对象的show和dismiss方法来控制对话框的显示和隐藏。

二是在Activity的onCreateDialog(int id)方法中创建Dialog对象并返回,然后调用Activty的showDialog(int id)和dismissDialog(int id)来显示和隐藏对话框。

区别在于通过第二种方式创建的对话框会继承Activity的属性,比如获得Activity的menu事件等。


使用AlertDialog可以创建普通对话框、带列表的对话框以及带单选按钮和多选按钮的对话框。

普通对话框

效果如下:

代码:

          //创建builder                 AlertDialog.Builder builder = new AlertDialog.Builder(DialogSampleActivity.this);                 builder.setTitle("普通对话框")    //标题                     .setIcon(R.drawable.ic_launcher)    //icon                     .setCancelable(false)    //不响应back按钮                     .setMessage("这是一个普通对话框")    //对话框显示内容 //设置按钮                     .setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override public void onClick(DialogInterface dialog, int which) {
Toast.makeText(DialogSampleActivity.this, "点击了确定按钮", Toast.LENGTH_SHORT).show(); } }) .setNeutralButton("中立", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) {
Toast.makeText(DialogSampleActivity.this, "点击了中立按钮", Toast.LENGTH_SHORT).show(); } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) {
Toast.makeText(DialogSampleActivity.this, "点击了取消按钮", Toast.LENGTH_SHORT).show(); } }); //创建Dialog对象 AlertDialog dlg = builder.create(); return dlg;

带列表的对话框

效果图:

代码:

       final CharSequence[] items = { "Item1", "Item2", "Item3" }; // 创建builder             AlertDialog.Builder builder = new AlertDialog.Builder(                     DialogSampleActivity.this);             builder.setTitle("列表对话框") // 标题                     .setIcon(R.drawable.ic_launcher) // icon                     .setCancelable(false) // 不响应back按钮                     .setItems(items, new DialogInterface.OnClickListener() {
@Override public void onClick(DialogInterface dialog, int which) {
Toast.makeText(DialogSampleActivity.this, "选择了" + items[which], Toast.LENGTH_SHORT) .show(); } }); // 创建Dialog对象 AlertDialog dlg = builder.create(); return dlg;

带单选按钮的列表对话框

只需将setItems替换为:

.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
@Override public void onClick(DialogInterface dialog, int which) {
Toast.makeText(DialogSampleActivity.this, "选择了" + items[which], Toast.LENGTH_SHORT) .show(); } });

这里多了一个参数-1,代表默认选中第几项,-1表示默认不选中

带复选框的列表对话框

只需将setItems替换为:

.setMultiChoiceItems(items, checked, new DialogInterface.OnMultiChoiceClickListener() {                                @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) {
Toast.makeText(DialogSampleActivity.this, "选择了" + items[which], Toast.LENGTH_SHORT) .show(); } });

参数checked伟boolean数组,表示默认哪些复选框是被选中的。

另外,如果你想要获取list中哪些项是被选中的,你需要:

//获得ListView ListView list = dlg.getListView(); //判断第i项是否被选中,为真表示被选中,为假表示没有选中 list.getCheckedItemPositions().get(i)

日期选择对话框

效果图

代码:

       Calendar calendar = Calendar.getInstance();             DatePickerDialog.OnDateSetListener dateListener =   new DatePickerDialog.OnDateSetListener() {                      @Override  public void onDateSet(DatePicker datePicker,   int year, int month, int dayOfMonth) {                          Toast.makeText(DialogSampleActivity.this,                                 year + "年" + (month+1) + "月" + dayOfMonth + "日", Toast.LENGTH_SHORT)                                 .show();                      }                 };              DatePickerDialog dlg = new DatePickerDialog(                     DialogSampleActivity.this,                     dateListener,                     calendar.get(Calendar.YEAR),                     calendar.get(Calendar.MONTH),                     calendar.get(Calendar.DAY_OF_MONTH)); return dlg;

时间选择对话框

效果图:

代码:

       Calendar calendar = Calendar.getInstance();             TimePickerDialog.OnTimeSetListener timeListener =   new TimePickerDialog.OnTimeSetListener() {
@Override public void onTimeSet(TimePicker timePicker, int hourOfDay, int minute) {
Toast.makeText(DialogSampleActivity.this, hourOfDay + ":" + minute, Toast.LENGTH_SHORT).show(); } }; TimePickerDialog dlg = new TimePickerDialog( DialogSampleActivity.this, timeListener, calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), true); return dlg;

自定义对话框

效果图:

步骤:

1、创建对话框的布局文件

2、因为该布局中使用了自定义的ListView,所以再为ListView创建布局文件

3、创建自定义Dialog类PriorityDlg继承自Dialog

public class PriorityDlg extends Dialog {
private Context context; private ListView dlg_priority_lvw = null; public PriorityDlg(Context context) {
super(context); this.context = context; // TODO Auto-generated constructor stub } public PriorityDlg(Context context, int theme) {
super(context, theme); this.context = context; } @Override protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub super.onCreate(savedInstanceState);    //设置对话框使用的布局文件 this.setContentView(R.layout.dlg_priority); dlg_priority_lvw = (ListView) findViewById(R.id.dlg_priority_lvw); // 设置ListView的数据源 SimpleAdapter adapter = new SimpleAdapter(context, getPriorityList(), R.layout.lvw_priority, new String[] { "list_priority_img", "list_priority_value" }, new int[] {
R.id.list_priority_img, R.id.list_priority_value }); dlg_priority_lvw.setAdapter(adapter); // 为ListView设置监听器 dlg_priority_lvw .setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override public void onItemClick(AdapterView
arg0, View arg1, int arg2, long arg3) {
} }); } /** * 得到ListView数据源 * * @return */ private List
> getPriorityList() {
List
> priorityList = new ArrayList
>(); HashMap
map1 = new HashMap
(); map1.put("list_priority_img", R.drawable.priority_not_important); map1.put("list_priority_value", context.getResources().getString( R.string.dlg_priority_not_important)); priorityList.add(map1); HashMap
map2 = new HashMap
(); map2.put("list_priority_img", R.drawable.priority_general); map2.put("list_priority_value", context.getResources().getString( R.string.dlg_priority_general)); priorityList.add(map2); HashMap
map3 = new HashMap
(); map3.put("list_priority_img", R.drawable.priority_important); map3.put("list_priority_value", context.getResources().getString( R.string.dlg_priority_important)); priorityList.add(map3); HashMap
map4 = new HashMap
(); map4.put("list_priority_img", R.drawable.priority_very_important); map4.put("list_priority_value", context.getResources().getString( R.string.dlg_priority_very_important)); priorityList.add(map4); return priorityList; } }

4、创建自定义对话框

PriorityDlg dlg = new PriorityDlg(SimpleTaskActivity.this, R.style.dlg_priority); return dlg;

这里的R.style.dlg_priority设置了对话框使用的样式文件,只是让对话框去掉标题栏,当然你也可以通过代码来完成这种效果:

到这里自定义对话框的创建就结束了,想要什么样子的对话框完全凭你自己的想像。

转载于:https://www.cnblogs.com/chenguanwei/archive/2011/12/01/2269830.html

你可能感兴趣的文章
面向对象初识
查看>>
计算一个整数二进制中1的个数
查看>>
netdom join 错误:指定的域不存在,或无法联系。
查看>>
Android中Dialog的使用
查看>>
Android Activity接收Service发送的广播
查看>>
[Leetcode] Spiral Matrix | 把一个2D matrix用螺旋方式打印
查看>>
加速和监控国际网络
查看>>
【Flex】读取本地XML,然后XML数据转成JSON数据
查看>>
字符串循环右移-c语言
查看>>
解决从pl/sql查看oracle的number(19)类型数据为科学计数法的有关问题
查看>>
古训《增广贤文》
查看>>
职场的真相——七句话
查看>>
xcode命令行编译时:codesign命令,抛出“User interaction is not allowed.”异常 的处理...
查看>>
[转载]开机出现A disk read error occurred错误
查看>>
STM32 C++编程 002 GPIO类
查看>>
无线冲方案 MCU vs SoC
查看>>
进程装载过程分析(execve系统调用分析)
查看>>
在windows 7中禁用media sense
查看>>
ELK-Elasticsearch安装
查看>>
Android 模拟器(Emulator)访问模拟器所在主机
查看>>