求飞翔的魔女百度网盘云

VC/MFC(3)
创建非模态对话框是调用的是Create(),第一个参数是对话框模板指针,第二个是父窗口指针,默认NULL。
BOOL CDialog::Create(LPCTSTR lpsztemplatename,CWnd* pparentwnd)
{在这里面会调用
return CreateIndirect(htemplate,pparentwnd,hinst);
很多代码,写不清了,你还是在非模态对话框的创建函数那里,即create()这里设置断点跟踪下去查看吧,createex()函数是创建窗口函数,CDialog没有重载它,你不能直接使用的。你使用的那个create()是从CWnd重载过来的。从断点处跟踪查看,就可以看到底层代码的调用了。
(CreateEx(...)创建自己资源ID对话框)一定不可以
Create()方法创建的是非模态对话框。非模态对话框显示使用dlg.ShowWindow(SW_SHOW);dlg.UpdateWindow();
模态对话框显示使用dlg.DoModal();注意了。
CreateEx()是CWnd的函数,不能使用这个函数通过对话框资源建立对话框,所以你说的(通过用CreateEx()创建时改变他的windows style 就是是原本我在资源编辑器中的style为child 现在在CreateEx()中 修改为 WS_POPUP )那是不可能的。
使用Create()创建对话框的话,此时对话框是非模态的,此时的对话框应该是全局的,它和主程序同时并存。
我给你的方法是
dlg.Create(IDD_ABOUTBOX);
::SetWindowLong(dlg.m_hWnd,GWL_STYLE,::GetWindowLong(dlg.m_hWnd,GWL_STYLE)& ~WS_MAXIMIZEBOX);
dlg.ShowWindow(SW_SHOW);
dlg.UpdateWindow();
===============================
解释:CAboutD这里定义一个全局的,或者说生命期和主程序一样长的一个变量。WS_MAXIMIZEBOX这就是窗口的属性,你可以随便修改。
对于你的问题,我还有个想法,你没搞清楚什么是模态对话框,什么是非模态对话框。一般使用模态对话框就可以了,如:CAboutDdlg.DoModal();
就会显示对话框,直到这个对话框关闭,不然程序一直停留在dlg.DoModal();这里。此时dlg可以是局部变量
::SetWindowLong(dlg.m_hWnd,
GWL_STYLE,::GetWindowLong(dlg.m_hWnd,GWL_STYLE)& ~WS_CHILD | WS_POPUP);
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:24178次
排名:千里之外
转载:28篇
(1)(1)(1)(1)(1)(2)(1)(4)(17)(4)安卓在4.0之前对话框都是模态的,之后就改成非模态了。&
解决方法吗,使用progressdialog.setCancelable(false)也行,但是这样就不能响应返回键的事件了,最好的方法是调用progressdialog.setCanceledOnTouchOutside(false),这样一切都和4.0之前的一样
下面是个例子:
ProgressDialog dialog = new ProgressDialog(MainActivity.this);
dialog.setTitle(&分析中。。。&);
dialog.setMessage(&请稍等。。。&);
//解决方法吗,使用progressdialog.setCancelable(false)也行,
//但是这样就不能响应返回键的事件了,
//最好的方法是调用progressdialog.setCanceledOnTouchOutside(false),这样一切都和4.0之前的一样
dialog.setCanceledOnTouchOutside(false);
dialog.show();
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:37694次
排名:千里之外
原创:37篇
转载:67篇
(1)(3)(20)(1)(1)(3)(1)(4)(4)(3)(63)(4)1232人阅读
Android开发(88)
AlertDialog类的功能十分强大,它不仅可以生成带按钮的提示对话框,还可以生成带列表的列表对话框,概括起来有一下4种:
1.带确定、中立和取消等N个按钮的提示对话框,其中的按钮个数不是固定的,可以根据需要添加。例如,不需要中立按钮,则可以只生成带有确定和取消按钮的对话框,也可以是只需有一个按钮的对话框。
2.带列表的列表对话框
3.带多个单选列表项和N个按钮的列表对话框
4.带多个多选列表项和N个按钮的列表对话框
在使用AlertDialog类生成对话框时,常用的方法如下所示:
setTitle :为对话框设置标题
setIcon :为对话框设置图标
setMessage:为对话框设置内容
setButton:用于为提示对话框添加按钮,可以是取消按钮、中立按钮和确定按钮。需要通过为其指定int类型的whichButton参数实现,其参数可以是DialogInterface.BUTTON_POSITIVE(确定按钮)、BUTTON_NEGATIVE(取消按钮)或者BUTTON_NEUTRAL(中立按钮)。
通常情况下,使用AlertDialog类只能生成带N个按钮的提示对话框,要生成另外3种列表对话框,需要使用AlertDialog.Builder类,AlertDialog.Builder类提供的常用方法如下表:
setTitle :为对话框设置标题
setIcon :为对话框设置图标
setMessage:为对话框设置内容
setView : 给对话框设置自定义样式
setItems :设置对话框要显示的一个list,一般用于显示几个命令时
setSingleChoiceItems :用来设置对话框显示一系列的单选框
setMultiChoiceItems :用来设置对话框显示一系列的复选框
setNeutralButton & &:普通按钮
setPositiveButton & :给对话框添加&Yes&按钮
setNegativeButton :对话框添加&No&按钮
create : 创建对话框
show :显示对话框
下面通过一个具体的实例说明如何使用AlertDialog类生成提示对话框和各种列表对话框
res/layout/main.xml:
&?xml version=&1.0& encoding=&utf-8&?&
&LinearLayout xmlns:android=&/apk/res/android&
android:orientation=&vertical&
android:layout_width=&fill_parent&
android:layout_height=&fill_parent&
android:id=&@+id/layout1&
android:gravity=&center_horizontal&
&Button android:id=&@+id/button1&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:text=&显示带取消、中立和确定按钮的对话框&/&
&Button android:id=&@+id/button2&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:text=&显示列表的对话框&/&
&Button android:id=&@+id/button3&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:text=&显示带单选列表对话框&/&
&Button android:id=&@+id/button4&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:text=&显示带多选列表对话框&/&
&/LinearLayout&
MainActivity:
package com.example.
import android.app.A
import android.app.AlertD
import android.app.AlertDialog.B
import android.content.DialogI
import android.content.DialogInterface.OnMultiChoiceClickL
import android.os.B
import android.view.V
import android.view.View.OnClickL
import android.widget.B
import android.widget.T
public class MainActivity extends Activity {
private boolean[] checkedI//记录各个列表项的状态
private String[]//各列表项要显示的内容
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//显示带取消、中立和确定按钮的对话框
Button button1=(Button)findViewById(R.id.button1);
button1.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
AlertDialog alert=new AlertDialog.Builder(MainActivity.this).create();
alert.setIcon(R.drawable.ic_launcher);//设置对话框的图标
alert.setTitle(&系统提示&);//设置对话框的标题
alert.setMessage(&显示带取消、中立和确定按钮的对话框!&);//设置对话框显示的内容
//添加“取消”按钮
alert.setButton(DialogInterface.BUTTON_NEGATIVE, &取消&,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int which) {
Toast.makeText(MainActivity.this, &您单击了取消按钮&, Toast.LENGTH_SHORT).show();
//添加“确定”按钮
alert.setButton(DialogInterface.BUTTON_POSITIVE, &确定&,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int which) {
Toast.makeText(MainActivity.this, &您单击了确定按钮&, Toast.LENGTH_SHORT).show();
//添加“中立”按钮
alert.setButton(DialogInterface.BUTTON_NEUTRAL, &中立&,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int which) {
Toast.makeText(MainActivity.this, &您单击了中立按钮&, Toast.LENGTH_SHORT).show();
alert.show();//显示对话框
//显示列表的对话框
Button button2=(Button)findViewById(R.id.button2);
button2.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
final String[] items=new String[]{&唱歌&,&跳舞&,&美术&,&远足旅行&,&摄影&};
Builder builder=new AlertDialog.Builder(MainActivity.this);
builder.setIcon(R.drawable.in);
builder.setTitle(&请选择你的爱好:&);
//添加列表项
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, &您选择了&+items[which],Toast.LENGTH_SHORT).show();
builder.create().show();//创建对话框并显示
//显示带单选列表对话框
Button button3=(Button)findViewById(R.id.button3);
button3.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
final String[] items=new String[]{&标准&,&无声&,&会议&,&户外&,&离线&};
Builder builder=new AlertDialog.Builder(MainActivity.this);
builder.setIcon(R.drawable.music);
builder.setTitle(&请选择要使用的情景模式:&);
builder.setSingleChoiceItems(items, 0, new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, &您选择了&+items[which],Toast.LENGTH_SHORT).show();
builder.setPositiveButton(&确定&, null);
builder.create().show();//创建对话框并显示
//显示带多选列表对话框
Button button4=(Button)findViewById(R.id.button4);
button4.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
checkedItems =new boolean[]{false,true,false,true,false};//记录各列表的状态
//各列表项要显示的内容
items=new String[]{&植物大战僵尸&,&愤怒的小鸟&,&泡泡龙&,&开心消消乐&,&地铁跑酷&};
//显示带单选列表框的对话框
Builder builder=new AlertDialog.Builder(MainActivity.this);
builder.setIcon(R.drawable.setting);
builder.setTitle(&请选择您喜欢的游戏:&);
builder.setMultiChoiceItems(items, checkedItems, new OnMultiChoiceClickListener() {
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
checkedItems[which]=isC
//为对话框添加&确定&按钮
builder.setPositiveButton(&确定&, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
String result=&&;
for (int i = 0; i &checkedItems. i++) {
if(checkedItems[i]){
result+=items[i]+&、&;
//当result不为空时,通过消息提示框显示选择的结果
if(!&&.equals(result)){
result=result.substring(0,result.length()-1);//去掉最后的&、&号
Toast.makeText(MainActivity.this, &您选择了:[&+result+&]&,Toast.LENGTH_SHORT).show();
builder.create().show();//创建对话框并显示
效果如图:
点击第一个按钮:
点击第二个按钮:
点击第三个按钮:
点击第四个按钮:
转载请注明出处:
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:796398次
积分:15992
积分:15992
排名:第594名
原创:802篇
转载:18篇
评论:418条
就职:上海远成物流信息部
职位:Java开发工程师
负责:物流系统开发与维护
专业:软件工程12级
文章:14篇
阅读:17579
文章:19篇
阅读:5543
文章:12篇
阅读:4193
文章:16篇
阅读:8820
阅读:15472
阅读:5355
文章:35篇
阅读:53954
文章:27篇
阅读:16781
文章:24篇
阅读:17993
文章:81篇
阅读:165881
文章:87篇
阅读:92670
文章:21篇
阅读:18603
文章:51篇
阅读:35147
文章:37篇
阅读:38308
文章:31篇
阅读:53365Android对话框的使用总结
一.相关概念
一个对话框一般是一个出现在当前Activity之上的一个小窗口. 处于下面的Activity失去焦点, 对话框接受所有的用户交互. 对话框一般用于提示信息和与当前应用程序直接相关的小功能.
API 支持下列类型的对话框对象:
(一)警告对话框 AlertDialog: 一个可以有0到3个按钮, 一个单选框或复选框的列表的对话框. 警告对话框可以创建大多数的交互界面, 是推荐的类型.
(二)进度对话框 ProgressDialog: 显示一个进度环或者一个进度条. 由于它是AlertDialog的扩展, 所以它也支持按钮.
二.AlertDialog的创建和使用
AlertDialog是Dialog的一个直接子类,使用AlertDialog,我们可以显示一个标题,最多3个按钮操作,以及一组选择框或者是自己定义的弹出框。
AlertDialog要使用Builder设计模式来创建对象 。
(一)Dialog的创建和使用
在时间应用中的对话框基本不用Dialog而是用它的子类。
这里简单使用一下Dialog,代码如下:
// 普通的对话框,普通的对话框功能很少,除非重写类
public void bt1(View v) {
// 创建对话框对象
Dialog dialog = new Dialog(this);
// 创建对话框内容
dialog.setTitle(&对话框的标题&);
// 显示对话框
dialog.show();
运行后显示结果:
可以看到有一个标题的对话框,而且这里没有设置内容的属性,Dialog的使用方法和功能都是很少的,不建议使用。
(二)比较正常的AlertDialog的创建和使用
代码设计:
// 警告对话框,需要用Builder方法创建
public void bt2(View v) {
// 这里的属性可以一直设置,因为每次设置后返回的是一个builder对象
AlertDialog.Builder builder = new AlertDialog.Builder(this);
// 设置提示框的标题
builder.setTitle(&提示标题&).
// 设置提示框的图标
setIcon(R.drawable.ic_launcher).
// 设置要显示的信息
setMessage(&文本的提示信息:你妈喊你回家吃饭了!&).
// 设置确定按钮
setPositiveButton(&确定&, new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, &选择就确定哦&, 0).show();
// 设置取消按钮,null是什么都不做
setNegativeButton(&取消&, null).
// 设置退出按钮,在中间的按钮
setNeutralButton(&退出&, new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// 退出程序
// 生产对话框
AlertDialog alertDialog = builder.create();
// 显示对话框
alertDialog.show();
程序运行后显示的结果:
这里如果点击取消,对话框消失,什么都没有做。
如果点击退出,会直接退出程序。
如果点击确定,会弹出一个土司,提示你。
这里可以根据用户的选择做出相应的行为。
&vcD4NCjxoMiBpZD0="三设计一个选择菜单样式的对话框">(三)设计一个选择菜单样式的对话框
代码设计:
String[] array = new String[] { &音乐&, &体育&, &舞蹈&, && };
// 显示一个菜单的对话框选项,点击选择菜单后,菜单会消失
// 匿名类去创建
public void bt3(View v) {
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
// 设置标题
builder.setTitle(&选择你最喜欢的课程&).
// 设置可选择的内容,并添加点击事件
setItems(array, new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// which代表的是选择的标签的序列号
Toast.makeText(MainActivity.this, &选择& + array[which],
0).show();
// 产生对话框,并显示出来
create().show();
程序运行后显示的结果:
设置菜单是builder的setItem方法来完成的。
点击某一个菜单选项后对话框会自动消失,所以这里设置按钮也是没有什么用处的。
这里还能监听点击菜单的事件,获取用户的选择内容。
(四)设置一个单选按钮菜单的对话框
其实这个对话框和上面的菜单对话框差不多,只是样式改变了,还有一点不同的是点击一个选项后对话框是不会消失的,所以必须要设置按钮,来使对话框消失。
代码设计:
// 单选按钮的对话框,选择一个按钮值后,
// 对话框也是不会自动消失,需要自己关闭
// 要设置按钮,点击按钮后对话框才会消失
public void bt4(View v) {
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
// 设置标题
builder.setTitle(&选择你最喜欢的课程&).
// 设置可选择的内容,并添加点击事件
// 第一个参数是可以选择的单选框的内容
// 第二个参数是默认选中的项
// 第三个参数是点击选中的监听器
setSingleChoiceItems(array, 0, new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, &选择& + array[which],
0).show();
// 因为对话框不会自动消失,所以要添加按钮的必要
// 设置确定按钮
setPositiveButton(&确定&, new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, &选择确定&, 0).show();
// 取消,什么都不做,对话框消失而已
setNegativeButton(&取消&, null).
// 产生对话框,并显示出来
create().show();
运行后的结果:
设置单选菜单是builder的setSingleChoiceItem方法来完成的。
这里要可以设置两个监听事件,一个是单选按钮某一个选项被选中时触发的,另一个是点击按钮时触发的事件。
程序中每次选中一个单选按钮都会弹出一个吐司,提示你选择的内容,点击确定后也会显示一个吐司。
(五)多选项的对话框设计
多选框的显示和单选的显示也是有点相似的,都是需要设置按钮来使对话框消失。
代码如下:
// 多选按钮的对话框
// 对话框也是不会自动消失,需要自己关闭
// 要设置按钮,点击按钮后对话框才会消失
public void bt5(View v) {
// 多选按钮的默认状态
boolean[] checkedItems = { true, false, false, true };
// 多选按钮选中后保存的数据
final List list = new ArrayList();
// 默认的数据
list.add(&音乐&);
list.add(&看书&);
// 创建对话框的builder对象
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
// 设置标题
builder.setTitle(&选择你最喜欢的课程&).
// 设置可选择的内容,并添加点击事件
// 第一个参数是可以选择的选框的内容
// 第二个参数是一个布尔数组,如果是true代表的是默认选中
// 第三个参数是点击选中的监听器
setMultiChoiceItems(array, checkedItems,
new OnMultiChoiceClickListener() {
public void onClick(DialogInterface dialog,
int which, boolean isChecked) {
// 这里无论某个选项是被选中后被取消都会触发该方法
// which代表的是选中的是多少游标值的选项
// isChecked是代表该选项是或否选中了
// 判断如果集合中有某个数据,就把他移除,否则就添加数据
// 注意这里数选择之后的状态
if (isChecked) {
// 添加数据
list.add(array[which]);
// 移除数据
list.remove(array[which]);
// 因为对话框不会自动消失,所以要添加按钮的必要
// 设置确定按钮
setPositiveButton(&确定&, new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, &你选中了& + list, 0)
// 取消,什么都不做,对话框消失而已
setNegativeButton(&取消&, null).
// 产生对话框,并显示出来
create().show();
程序运行后的结果:
设置多选菜单是builder的setMultiChoiceItem方法来完成的。
这里要可以设置两个监听事件,一个是选项框的某一个选项的状态改变时触发的,另一个是点击按钮时触发的事件。
程序中每次改变选项的内容,保存数据的集合都会改变,点击确定后也会显示一个吐司,显示集合里面的内容。
选择全部内容后,确定,显示的结果:
(六)使用适配器显示对话框
使用适配器显示对话框和显示菜单对话框类似,都是选中对应选项后,对话框自动消失,但是使用适配器可以显示很负责的界面。
// 使用适配器显示对话框--&builder的setAdapter方法
// 这里选择一个选项后,对话框就会关闭,所以是不需要设置按钮的
// 其实这里可以设置很复杂的适配器对象,但是实际应用中不会在对话框显示太复杂的布局
public void bt6(View v) {
// 创建ArrayAdapter适配器
// android.R.layout.simple_list_item_1是Android里面的简单布局
// 第三个参数是数据源
ArrayAdapter adapter = new ArrayAdapter(this,
android.R.layout.simple_list_item_1, array);
// 创建对话框对象
new AlertDialog.Builder(this).
// 设置标题
setTitle(&使用适配器显示数据&).
// 添加适配器,并为适配器添加点击事件
setAdapter(adapter, new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// which是选择的条目的游标值
Toast.makeText(MainActivity.this, &选择& + array[which],
0).show();
// 产生并显示
create().show();
运行程序后显示的结果:
设置多选菜单是builder的setAdapter方法来完成的。
这里要设置一个监听事件,适配器的监听事件。
这里点击某一个选项后,对话框消失,并土司选中的内容。
(七)设计一个有输入框的对话框
// 设置一个有输入文本的对话框----&builder的setView方法
// 输入数据后,对数据进行处理
// 这里要设置按钮,才能对数据的数据进行处理
public void bt7(View v) {
// 创建一个EditText对象
final EditText et = new EditText(this);
// 创建对话框对象
new AlertDialog.Builder(this).
// 设置标题
setTitle(&有输入框的对话框&).
// 添加输入的文本框
setView(et).
// 添加确定按钮
setPositiveButton(&确定&, new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// 获取输入的字符
String in = et.getText().toString();
Toast.makeText(MainActivity.this, &输入;& + in, 0).show();
}).setNegativeButton(&取消&, null).
// 产生并显示
create().show();
运行后的结果:
设置输入框是builder的setView方法来完成的。
这里要设置一个按钮监听事件。
这里点击确定按钮后,获取输入框的内容并土司出来。
(八)使用对话框内的控件控制对话框
这里使用对话框内的一个布局文件的按钮,来关闭对话框
// 使用对话框内的控件来关闭对话框
public void bt8(View v) {
// 创建一个EditText对象
final Button btn = new Button(this);
// 给按钮设置文字
btn.setText(&关闭对话框&);
// 创建对话框对象
final AlertDialog dialog = new AlertDialog.Builder(this).
// 设置标题
setTitle(&通过按钮关闭对话框&).
// 添加输入的文本框
setView(btn).
// 设置对话框不可以关闭,一般情况下对话框是失去焦点后自动消失的
// 但是加 了.setCancelable(false),对话框就不会消失,除非手动退出
dialog.setCancelable(false);
btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// 点击后关闭对话框,两种方法都可以
dialog.cancel();
//dialog.dismiss();
dialog.show();
//给对话框设置一个监听时间,对话框退出前会执行
dialog.setOnDismissListener(new OnDismissListener() {
public void onDismiss(DialogInterface dialog) {
// 只要关闭都会调用
Toast.makeText(MainActivity.this, &关闭&, Toast.LENGTH_SHORT)
运行结果:
这里设置了dialog.setCancelable(false);的属性,代表了对话框不能随着焦点的失去而消失对话框,要收到关闭对话框,要么设置确定和取消按钮,要么在对话框布局中设置能够关闭对话框的控件;
(九)AlertDialog的详细属性
对话框的全部属性表现,如图所示:
这里分上、中、下三部分。
区域一是标题相关
区域二是主体相关
区域三是按钮相关
其中任何部分都可以不设置,
但是有一点要注意的是主体内容只能有一种,比如:设置了SetMessage不能再设置SetAdapter或SetView。因为设置了也不会显示的。
1.区域1那里就是定义弹出框的头部信息
包括标题名或者是一个图标。
(1)setTitle : 为对话框设置标题
(2)setIcon : 为对话框设置图标
2.区域2那里是AlertDialog对话框的content部分
在这里我们可以设置一些message信息,或者是定义一组选择框,还可以定义我们自己的布局弹出框。
(1)setMessage: 为对话框设置内容,如果设置了其他内容,那么Message不要设置,否者只显示Message。
(2)setView: 给对话框设置自定义View
setItems: 设置对话框要显示的一个list,一般用于显示几个命令时
//items是传入一个字符串数组,或者是R文件中的数组
(3)setSingleChoiceItems: 用来设置对话框显示一系列的单选按钮
(4)setMultiChoiceItems: 用来设置对话框显示一系列的复选框
3.区域3那里使我们的Action Buttons部分
这里我们可以定义我们的操作按钮。
在AlertDialog中,定义按钮都是通过 setXXXButton 方法来完成,其中一共有3种不同的Action Buttons供我们选择:
(1)setPositiveButton(CharSequence text, DialogInterface.OnClickListener listener)
这是一个相当于OK、确定操作的按钮.
(2)setNegativeButton (CharSequence text, DialogInterface.OnClickListener listener)
这是一个相当于取消操作的按钮。
(3)setNeutralButton (CharSequence text, DialogInterface.OnClickListener listener)
这个是相当于一个忽略操作的按钮。
触发相关按钮都的行为都是我们程序员自己定的,比如你可以设置点击确定后关闭页面,也可以设置点击取消后关闭页面。但是我们设计的时候还是要按照大部分人的习惯来设定。
4.监听事件的说明
在AlertDialog的各种设置中,都充斥着DialogInterface.OnClickListener,比如按钮,内容区的items,单选按钮等,只有多选按钮是用了另外一个监听
DialogInterface.OnMultiChoiceClickListener。
(1)单选按钮的监听
public void onClick(DialogInterface dialog, int which);
//which代表items,单选按钮中的序号
(2)多选按钮的监听
public void onClick(DialogInterface dialog, int which, boolean isChecked);
//which代表items,单选按钮中的序号
//isChecked代表当前点击的序号是否被勾选
(3)Adapter的监听
AlertDialog还支持ListAdapter的子类,我们可以传入各种ListAdapter的子类,来显示复杂的列表,当然直接使用 setView 也可以办到
public Builder setAdapter(final ListAdapter adapter, final
OnClickListener listener)
三.ProgressDialog进度对话框
ProgressDialog是AlertDialog类的子类,可以为一个未定义进度的任务显示一个旋转轮形状的进度动画,或者为一个指定进度的任务显示一个进度条。它的用处非常广泛,在每次用户操作一个延迟的任务时,我们都必须以进度对话框的形式告诉用户,否者用户并不知道操作已经开始,可能会多次操作同一个任务,并有可能导致异常发生。
(一)构造方法和常用方法
1.构造方法需要传入一个上下文
public ProgressDialog(Context context)
2.给定一个样式,带进度条和不带进度条的样式
public void setProgressStyle(int style) //可选值
//STYLE_SPINNER 默认 圆形,没有进度条的样式
//STYLE_HORIZONTAL 给定进度条的样式
3.设置进度最大值,需要给定STYLE_HORIZONTAL
public void setMax(int max)
4.是否能用返回键关闭 true可以关闭,false不能关闭
public void setCancelable(boolean flag)
5.设置一个消息
public void setMessage(CharSequence message)
6.判断Dialog是否显示
public boolean isShowing()
7.关闭对话框
public void dismiss()
8.ProgressDialog从AlertDialog中继承的常用方法setIcon和setTitile
9.虽然ProgressDialog可以设置Button,但是我们一般都不会去使用它
(二)进度对话框的设计的使用
1.圆形进度条对话框
// 显示圆形的进度框
public void bt1(View v) {
// 创建进度条的对话框
ProgressDialog dialog = new ProgressDialog(this);
// 设置进度条的样式,选择圆形或条状
// 这里这圆形的
dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
// 设置标题
dialog.setTitle(&文件下载&);
// 设置文本信息
dialog.setMessage(&正在下载。。。&);
// 设置是否能用后退键出对话框
// 选择false就代表不能
// 如果设置为false,程序可能退出不了
dialog.setCancelable(true);
// 显示对话框
dialog.show();
程序运行后的结果:
这里点击进度对话框的其他地方,对话框就消失了。因为默认情况,对话框失去焦点就会消失。
2.条形对话框
// 显示设置水平的进度框
public void bt2(View v) {
// 创建进度条的对话框
final ProgressDialog dialog = new ProgressDialog(this);
// 设置进度条的样式,选择圆形或条状
// 这里这圆形的
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
// 设置标题
dialog.setTitle(&文件下载&);
// 设置文本信息
dialog.setMessage(&正在下载。。。&);
// 设置是否能用后退键出对话框
// 选择false就代表不能
// 如果设置为false,程序可能退出不了
dialog.setCancelable(false);
// 显示对话框
dialog.show();
// 这里新建一个线程来,跟新进度和关闭页面
new Thread(new Runnable() {
public void run() {
// 获取进度值的当前的值
int index = 0;
// 跟新进度
while (index & dialog.getMax()) {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
// 设置进度的值
dialog.setProgress(index);
// 完成任务后,退出对话框
dialog.cancel();
}).start();
运行结果:
这个进度对话框是没有办法取消的,因为设置了:dialog.setCancelable(false);
只能等到文件下载完成后对话框自动消失。这个设置在实际应用中也是会有用到的,比如复制文件,不能随便打断。本示例中,进度的跟新需要用子线程来更新,进度条的更新可以直接在子线程中实现,而其他布局的跟新是不能在子线程中直接更新的。要使用runOnUIThread();方法来更新主线程的界面,
四.时间和日期选择器对话框
(一)时间和日期对话框的方法
DatePickerDialog与TimePickerDialog都继承于AlertDialog,基本方法和我们前面讲的DatePicker和TimePicker一样,只是需要调用Dialog的show方法来显示。在构造方法里需要传入回调监听
1.用户改变时间后的监听
public interface OnTimeChangedListener { void onTimeChanged(TimePicker view, int hourOfDay, int minute);
2.用户改变日期后的监听
public interface OnDateChangedListener { void onDateChanged(DatePicker view, int year, int monthOfYear,
int dayOfMonth);
(二)时间对话框的使用
// 显示时间的对话框
public void btn1(View v) {
// 第一个参数是上下文
// 第二个参数是监听时间选择后的事件
// 后面两个数是默认是时间
// 后一个是代表是否显示时间的格式是24小时制的
TimePickerDialog dialog = new TimePickerDialog(this,
new OnTimeSetListener() {
public void onTimeSet(TimePicker view, int hourOfDay,
int minute) {
Toast.makeText(MainActivity.this,
hourOfDay + &时& + minute + &分&, 0).show();
}, 21, 8, true);
//显示标题
dialog.setTitle(&选择你要设定的时间&);
// 显示时间的对话框
dialog.show();
运行后显示的结果:
这是时间对话框的选择按钮,其中也可以设置很多属性。
这里点击完成后会弹出一个选择的时间的土司。
如图所示:
(三)日期对话框的使用
// 显示日期的对话框
public void btn2(View v) {
// 第一个参数是上下文
// 第二个参数是监听时间选择后的事件
// 后面三个数是默认是日期数
DatePickerDialog dialog = new DatePickerDialog(this,
new OnDateSetListener() {
// 日期选择器上的月份是从0开始的
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
Toast.makeText(
MainActivity.this,
year + &年& + (monthOfYear + 1) + &月&
+ dayOfMonth + &日&, 0).show();
// 显示时间的对话框
dialog.show();
点击运行后,显示结果:
上面是日期对话框的默认画面,也是挺好看的,实际中也可以根据实际需要对它的页面样式进行修改。
点击完成后显示的结果:
以上就是Android对话框大部分控件的基本使用。
对于有些对话框选择之后对话框会自动消失,就没有必要设置ActionButton了
但是有些对话框是不会自动消失的,就需要设置ActionButton或在页面布局中有可以关掉对话框的控件。
对于有些界面没有设计得很好看,这个需要自己花时间去慢慢琢磨,这里只是介绍它们的用法和一些属性。还有它们的简单效果。

我要回帖

更多关于 飞翔的魔女百度云分享 的文章

 

随机推荐