Android开发中Dialog对话框的使用
2013-07-02 21:57
447 查看
2011年12月01日09:34 来源:博客园作者:诚实小郎君 编辑:景保玉
我要评论(0)
【IT168技术】Dialog是android开发过程中最常用到的组件之一,它包括以下几种类型:
警告对话框:Alertialog
进度对话框:ProgressDialog
日期选择对话框:DatePickerDialog
时间选择对话框:TimePickerDialog
自定义对话框:从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、创建对话框的布局文件
<?xml version="1.0"
encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<!-- 标题栏
-->
<LinearLayout
android:id="@+id/dlg_priority_titlebar"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true">
<ImageView
android:src="@drawable/star_gray"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dip"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="选择任务优先级"
android:layout_gravity="center_vertical"/>
</LinearLayout>
<!-- 任务优先级
-->
<ListView
android:id="@+id/dlg_priority_lvw"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/dlg_priority_titlebar"
android:background="@drawable/layout_home_bg">
</ListView>
</RelativeLayout>
2、因为该布局中使用了自定义的ListView,所以再为ListView创建布局文件
<?xml version="1.0"
encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:id="@+id/list_priority_img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_margin="5dip" /> <TextView
android:id="@+id/list_priority_value" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_gravity="center_vertical"
android:textSize="28dip" android:textColor="@drawable/black"/></LinearLayout>
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<HashMap<String,
Object>> getPriorityList() {
List<HashMap<String,
Object>> priorityList
= new ArrayList<HashMap<String,
Object>>();
HashMap<String,
Object> map1
= new HashMap<String,
Object>();
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<String,
Object> map2
= new HashMap<String,
Object>();
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<String,
Object> map3
= new HashMap<String,
Object>();
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<String,
Object> map4
= new HashMap<String,
Object>();
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设置了对话框使用的样式文件,只是让对话框去掉标题栏,当然你也可以通过代码来完成这种效果:
<?xml version="1.0"
encoding="utf-8"?><resources> <!--
对话框样式 --> <style name="dlg_priority"
parent="@android:Theme.Dialog"> <item
name="android:windowNoTitle">true</item> </style></resources>
到这里自定义对话框的创建就结束了,想要什么样子的对话框完全凭你自己的想像。
我要评论(0)
【IT168技术】Dialog是android开发过程中最常用到的组件之一,它包括以下几种类型:
警告对话框:Alertialog
进度对话框:ProgressDialog
日期选择对话框:DatePickerDialog
时间选择对话框:TimePickerDialog
自定义对话框:从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、创建对话框的布局文件
<?xml version="1.0"
encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<!-- 标题栏
-->
<LinearLayout
android:id="@+id/dlg_priority_titlebar"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true">
<ImageView
android:src="@drawable/star_gray"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dip"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="选择任务优先级"
android:layout_gravity="center_vertical"/>
</LinearLayout>
<!-- 任务优先级
-->
<ListView
android:id="@+id/dlg_priority_lvw"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/dlg_priority_titlebar"
android:background="@drawable/layout_home_bg">
</ListView>
</RelativeLayout>
2、因为该布局中使用了自定义的ListView,所以再为ListView创建布局文件
<?xml version="1.0"
encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:id="@+id/list_priority_img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:layout_margin="5dip" /> <TextView
android:id="@+id/list_priority_value" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_gravity="center_vertical"
android:textSize="28dip" android:textColor="@drawable/black"/></LinearLayout>
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<HashMap<String,
Object>> getPriorityList() {
List<HashMap<String,
Object>> priorityList
= new ArrayList<HashMap<String,
Object>>();
HashMap<String,
Object> map1
= new HashMap<String,
Object>();
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<String,
Object> map2
= new HashMap<String,
Object>();
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<String,
Object> map3
= new HashMap<String,
Object>();
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<String,
Object> map4
= new HashMap<String,
Object>();
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设置了对话框使用的样式文件,只是让对话框去掉标题栏,当然你也可以通过代码来完成这种效果:
<?xml version="1.0"
encoding="utf-8"?><resources> <!--
对话框样式 --> <style name="dlg_priority"
parent="@android:Theme.Dialog"> <item
name="android:windowNoTitle">true</item> </style></resources>
到这里自定义对话框的创建就结束了,想要什么样子的对话框完全凭你自己的想像。
相关文章推荐
- 【Android 开发】:UI控件之 TimePickerDialog 时间对话框的使用
- Android开发中Dialog对话框的使用
- Android开发基础之AlertDialog的单选对话框的使用
- Android开发之缓冲dialog对话框创建、使用与封装操作
- Android开发中Dialog对话框的使用
- Android开发中Dialog对话框的使用
- Android开发中Dialog对话框的使用
- Android开发中Dialog对话框的使用
- Android开发中Dialog对话框的使用
- Android开发基础之AlertDialog的列表对话框的使用
- android 开发AlertDialog.builder对话框的实现
- Android中对话框(dialog)的使用
- Android中的Dialog 对话框的使用
- Android 对话框Dialog的使用,最基本,最基础的使用
- Android中DatePickerDialog对话框和TimePickerDialog对话框的使用
- Android 使用AlertDialog.Builder构造对话框dialog全过程
- Android软件开发之盘点所有Dialog对话框大合集
- Android软件开发之盘点所有Dialog对话框大合集(一) .
- 【Android开发】消息提示框与对话框-使用Toast显示消息提示框
- ANDROID中自定义对话框AlertDialog使用示例