博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android中Dialog对话框的调用及监听
阅读量:3725 次
发布时间:2019-05-22

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

转自:http://www.cnblogs.com/xiaofeixiang/p/4084056.html

Android中经常会需要在Android界面上弹出一些对话框提示用户,比如App的退出的时候都会有各种框来挽留你的心,支付宝的时候输入密码的密码框,非常常见及其实用的功能,类似于JS中的alter,C#中C/S中常用MessgeBox,总而言之就是一个功能弹,弹,弹,本文就简单的叙述一下Dialog的各种弹框使用及监听,顺便写了一个简单的自定义弹框,接下来请看正文:

一般对话框

先看下整个App页面:

看下一般对话框的结果:

 

具体代码的实现,其中定义了两个按钮,一个是确定(PositiveButton)按钮,一个是取消(NegativeButton)按钮:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
builder = 
new 
AlertDialog.Builder(
this
);
        
builder.setTitle(
"亲,你真的要离开吗?"
);
        
// 相当于确定
        
builder.setPositiveButton(
"退出"
,
                
new 
DialogInterface.OnClickListener() {
                    
@Override
                    
public 
void 
onClick(DialogInterface dialog, 
int 
which) {
                        
// TODO Auto-generated method stub
                        
Toast.makeText(MainActivity.
this
"是的,哥要走了"
,
                                
Toast.LENGTH_SHORT).show();
                    
}
                
});
        
// 相当于取消
        
builder.setNegativeButton(
"再看看"
,
                
new 
DialogInterface.OnClickListener() {
 
                    
@Override
                    
public 
void 
onClick(DialogInterface dialog, 
int 
which) {
                        
// TODO Auto-generated method stub
                        
Toast.makeText(MainActivity.
this
"行,哥再看会"
,
                                
Toast.LENGTH_SHORT).show();
                    
}
                
});
 
        
builder.show();

 ICON对话框

上面只是用到了两个按钮,其实还有一个是中立按钮,另外发现每次都写一个监听事件感觉太麻烦了,可以单独写一个监听事件去判断哪个事件被触发了:

 

单独定义个DialogClickListener:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private 
DialogInterface.OnClickListener dialogClickListener = 
new 
DialogInterface.OnClickListener() {
 
    
@Override
    
public 
void 
onClick(DialogInterface dialog, 
int 
which) {
        
// TODO Auto-generated method stub
        
switch 
(which) {
        
case 
DialogInterface.BUTTON_POSITIVE:
            
Toast.makeText(MainActivity.
this
"强烈支持" 
+ which,
                    
Toast.LENGTH_SHORT).show();
            
break
;
        
case 
DialogInterface.BUTTON_NEUTRAL:
            
Toast.makeText(MainActivity.
this
"跟我无关,我是中立的" 
+ which,
                    
Toast.LENGTH_SHORT).show();
            
break
;
        
case 
DialogInterface.BUTTON_NEGATIVE:
            
Toast.makeText(MainActivity.
this
"强烈反对" 
+ which,
                    
Toast.LENGTH_SHORT).show();
            
break
;
        
default
:
            
break
;
        
}
    
}
};

  按钮事件的调用:

1
2
3
4
5
6
7
8
9
builder = 
new 
AlertDialog.Builder(
this
);
        
builder.setTitle(
"XX视频"
);
        
builder.setIcon(android.R.drawable.btn_star);
        
builder.setMessage(
"如何看待香港占中事件?"
);
        
builder.setPositiveButton(
"支持"
, dialogClickListener);
        
builder.setNegativeButton(
"反对"
, dialogClickListener);
        
// 中立
        
builder.setNeutralButton(
"中立"
, dialogClickListener);
        
builder.show();

列表对话框

看下效果图:

 

代码实现: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
builder = 
new 
AlertDialog.Builder(
this
);
    
builder.setTitle(
"NBA幻觉"
);
    
builder.setIcon(android.R.drawable.btn_star);
    
final 
String[] nameArrStrings = 
new 
String[] { 
"马刺很老"
"小牛很弱"
,
            
"火箭很强" 
};
    
builder.setItems(nameArrStrings, 
new 
OnClickListener() {
 
        
@Override
        
public 
void 
onClick(DialogInterface dialog, 
int 
which) {
            
// TODO Auto-generated method stub
            
Toast.makeText(MainActivity.
this
, nameArrStrings[which],
                    
Toast.LENGTH_SHORT).show();
        
}
    
});
    
builder.setPositiveButton(
"确定"
new 
OnClickListener() {
 
        
@Override
        
public 
void 
onClick(DialogInterface dialog, 
int 
which) {
            
// TODO Auto-generated method stub
 
        
}
    
});
    
builder.setNegativeButton(
"取消"
new 
OnClickListener() {
 
        
@Override
        
public 
void 
onClick(DialogInterface dialog, 
int 
which) {
            
// TODO Auto-generated method stub
 
        
}
    
});
    
builder.show();

  单选对话框

效果图:

代码实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
builder = 
new 
AlertDialog.Builder(
this
);
        
builder.setTitle(
"NBA球队"
);
        
builder.setIcon(android.R.drawable.btn_radio);
        
final 
String[] ballArr = 
new 
String[] { 
"骑士"
"热火"
"凯尔特人" 
};
        
builder.setSingleChoiceItems(ballArr, 
1
new 
OnClickListener() {
 
            
@Override
            
public 
void 
onClick(DialogInterface dialog, 
int 
which) {
                
// TODO Auto-generated method stub
                
Toast.makeText(MainActivity.
this
, ballArr[which],
                        
Toast.LENGTH_SHORT).show();
            
}
        
});
        
builder.setPositiveButton(
"确定"
new 
OnClickListener() {
 
            
@Override
            
public 
void 
onClick(DialogInterface dialog, 
int 
which) {
                
// TODO Auto-generated method stub
 
            
}
        
});
        
builder.setNegativeButton(
"取消"
new 
OnClickListener() {
 
            
@Override
            
public 
void 
onClick(DialogInterface dialog, 
int 
which) {
                
// TODO Auto-generated method stub
 
            
}
        
});
        
builder.show();

  多选对话框

效果图:

 

代码实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
builder = 
new 
AlertDialog.Builder(
this
);
        
builder.setTitle(
"NBA球星"
);
        
builder.setIcon(android.R.drawable.btn_radio);
        
final 
String[] ballstartArr = 
new 
String[] { 
"邓肯"
"诺维斯基"
"莱昂纳德"
,
                
"科比" 
};
        
final 
boolean
[] multiCheckedArrStrings = 
new 
boolean
[] { 
true
,
                
false
true
false 
};
        
builder.setMultiChoiceItems(ballstartArr, multiCheckedArrStrings,
                
new 
OnMultiChoiceClickListener() {
 
                    
@Override
                    
public 
void 
onClick(DialogInterface dialog, 
int 
which,
                            
boolean 
isChecked) {
                        
// TODO Auto-generated method stub
                        
StringBuffer buffer = 
new 
StringBuffer();
                        
for 
(
int 
i = 
0
; i < multiCheckedArrStrings.length; i++) {
                            
if 
(multiCheckedArrStrings[i]) {
                                
buffer.append(ballstartArr[i] + 
","
);
                            
}
                        
}
                        
buffer.deleteCharAt(buffer.length() - 
1
);
                        
Toast.makeText(MainActivity.
this
, buffer,
                                
Toast.LENGTH_SHORT).show();
                    
}
                
});
 
        
builder.setPositiveButton(
"确定"
new 
OnClickListener() {
 
            
@Override
            
public 
void 
onClick(DialogInterface dialog, 
int 
which) {
                
// TODO Auto-generated method stub
 
            
}
        
});
        
builder.show();

  文本对话框

比如说支付宝,转账的时候你需要输入密码,弹出一个密码输入框,效果如图:

代码实现,,这个时候你需要给builder中的view赋值:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
builder = 
new 
AlertDialog.Builder(
this
);
    
builder.setTitle(
"输入密码"
);
    
builder.setIcon(android.R.drawable.btn_star);
    
final 
EditText editText = 
new 
EditText(MainActivity.
this
);
    
builder.setView(editText);
    
builder.setPositiveButton(
"确定"
,
            
new 
DialogInterface.OnClickListener() {
                
@Override
                
public 
void 
onClick(DialogInterface dialog, 
int 
which) {
                    
// TODO Auto-generated method stub
                    
Toast.makeText(MainActivity.
this
,
                            
"输入的密码是:" 
+ editText.getText(),
                            
Toast.LENGTH_SHORT).show();
                
}
            
});
    
builder.setNegativeButton(
"取消"
,
            
new 
DialogInterface.OnClickListener() {
 
                
@Override
                
public 
void 
onClick(DialogInterface dialog, 
int 
which) {
                    
// TODO Auto-generated method stub
                    
Toast.makeText(MainActivity.
this
"取消"
,
                            
Toast.LENGTH_SHORT).show();
                
}
            
});
 
    
builder.show();

 

  自定义对话框

上面的那个EditText是创建的,其实可以自定义一个布局,然后通过填充进去,效果如下:

自定义一个dialog_text.xml文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version=
"1.0" 
encoding=
"utf-8"
?>
<LinearLayout xmlns:android=
""
    
android:layout_width=
"match_parent"
    
android:layout_height=
"match_parent"
    
android:orientation=
"horizontal" 
>
 
    
<TextView
        
android:layout_width=
"wrap_content"
        
android:layout_height=
"wrap_content"
        
android:text=
"密码:" 
/>
 
     
    
<EditText
        
android:id=
"@+id/edit_password"
        
android:layout_width=
"match_parent"
        
android:layout_height=
"wrap_content"
        
/>
</LinearLayout>

  代码实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
builder = 
new 
AlertDialog.Builder(
this
);
    
builder.setTitle(
"输入密码"
);
    
builder.setIcon(android.R.drawable.btn_star);
    
final 
EditText editText = 
new 
EditText(MainActivity.
this
);
    
builder.setView(editText);
    
builder.setPositiveButton(
"确定"
,
            
new 
DialogInterface.OnClickListener() {
                
@Override
                
public 
void 
onClick(DialogInterface dialog, 
int 
which) {
                    
// TODO Auto-generated method stub
                    
Toast.makeText(MainActivity.
this
,
                            
"输入的密码是:" 
+ editText.getText(),
                            
Toast.LENGTH_SHORT).show();
                
}
            
});
    
builder.setNegativeButton(
"取消"
,
            
new 
DialogInterface.OnClickListener() {
 
                
@Override
                
public 
void 
onClick(DialogInterface dialog, 
int 
which) {
                    
// TODO Auto-generated method stub
                    
Toast.makeText(MainActivity.
this
"取消"
,
                            
Toast.LENGTH_SHORT).show();
                
}
            
});
 
    
builder.show();

------------2015.11.15更新---忘记写了,还有一种是进度条对话框,简单的进度对话框和带进度的对话框-----

代码如下:

 

1
2
3
4
ProgressDialog  progressDialog=
new  
ProgressDialog(
this
);
        
progressDialog.setTitle(
"XX助手"
);
        
progressDialog.setMessage(
"XX正在更新。。。"
);
        
progressDialog.show();

 

显示进度的对话框:

 

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
final 
ProgressDialog  precentDialog=
new  
ProgressDialog(
this
);
    
precentDialog.setTitle(
"XX下载"
);
    
precentDialog.setMessage(
"XX正在更新。。。"
);
    
precentDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);                                   
    
precentDialog.setMax(
100
);
    
precentDialog.show();
    
new 
Thread(){
        
public 
void 
run() {
            
for 
(
int 
i = 
0
; i < 
100
; i++) {
                
try 
{
                    
Thread.sleep(
50
);
                
catch 
(InterruptedException e) {
                    
e.printStackTrace();
                
}
                
precentDialog.setProgress(i);
            
}
            
precentDialog.dismiss();
        
};
    
}.start();  
你可能感兴趣的文章
2021年如何创业,VR全景创业怎么样?
查看>>
VR全景加盟要注意什么,全景加盟如何选择?
查看>>
关于VR技术与VR全景,这些知识你要知道
查看>>
高考结束出游旺季,VR全景在这些行业正是用武之地!
查看>>
720全景展示是什么?全景展示有什么用?
查看>>
做全景效果图用哪个软件?3d效果全景图软件如何制作?
查看>>
什么是全景vr视频?怎么制作VR视频?
查看>>
360度全景视频拍摄小技巧,这些方法你要知道
查看>>
智能一体化VR展会,这才是观众想要的样子!
查看>>
学习编程的技术网站和app。
查看>>
host ‘‘ is not allowed to connect to this mysql server连接mysql时报错。
查看>>
用KMains算法实现成绩的预测(并对一些数据进行可视化)
查看>>
主成分分析算法PCA并以实例验证
查看>>
K最近邻(kNN,k-NearestNeighbor)分类算法
查看>>
【C++从青铜到王者】第五篇:C/C++内存管理
查看>>
【C++从青铜到王者】第六篇:C++模板初阶
查看>>
【Linux从青铜到王者】第八篇:Linux基础IO
查看>>
【Linux从青铜到王者】第九篇:Linux进程间通信第一篇
查看>>
【Linux从青铜到王者】第十篇:Linux进程间通信第二篇
查看>>
第五周作业:利用matlab将图片依次进行,平移、镜像、旋转、0.5 倍缩小,然后分别将变换后的图像进行二维傅里叶变换。
查看>>