(转载)Android UI设计之AlertDialog弹窗控件
有关android的弹窗界面相信大家见过不少了,手机上很多应用软件都涉及到弹窗控件,比如典型的每次删除一个图片或者卸载一个等都会弹出一个窗口询问是否删除/卸载等,还有我们系统的设置时间/日期等,都用到了这样的控件,下面我将通过代码来总结下常用的几个弹窗控件
activity_main.xml
|
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
<?xml version="1.0" encoding="utf-8"?> android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.company.alertdialog.MainActivity"> <Button android:id="@+id/btn1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="onClick" android:text="列表弹窗" /> <Button android:id="@+id/btn2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="onClick" android:text="单选弹窗" /> <Button android:id="@+id/btn3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="onClick" android:text="多选弹窗" /> <Button android:id="@+id/btn4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="onClick" android:text="日期弹窗" /> <Button android:id="@+id/btn5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="onClick" android:text="时间弹窗" /> <Button android:id="@+id/btn6" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="onClick" android:text="进度条弹窗" /></LinearLayout> |
strings.xml
|
1
2
3
4
5
6
7
8
9
10
11
|
<resources> <string name="app_name">AlertDialog</string> <string-array name="list"> <item>列表一</item> <item>列表二</item> <item>列表三</item> <item>列表四</item> <item>列表五</item> <item>列表六</item> </string-array></resources> |
MainActivity.java
|
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
|
public class MainActivity extends AppCompatActivity implements View.OnClickListener { //表示列表弹窗 private Button mBtn1; //表示单选弹窗 private Button mBtn2; //表示多选弹窗 private Button mBtn3; //表示日期弹窗 private Button mBtn4; //表示时间弹窗 private Button mBtn5; //表示进度条弹窗 private Button mBtn6; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); event(); } /** * 设置监听事件 */ private void event() { mBtn1.setOnClickListener(this); mBtn2.setOnClickListener(this); mBtn3.setOnClickListener(this); mBtn4.setOnClickListener(this); mBtn5.setOnClickListener(this); mBtn6.setOnClickListener(this); } /** * 初始化控件 */ private void init() { mBtn1 = (Button) findViewById(R.id.btn1); mBtn2 = (Button) findViewById(R.id.btn2); mBtn3 = (Button) findViewById(R.id.btn3); mBtn4 = (Button) findViewById(R.id.btn4); mBtn5 = (Button) findViewById(R.id.btn5); mBtn6 = (Button) findViewById(R.id.btn6); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn1: createListDialog(); break; case R.id.btn2: createSingleDialog(); break; case R.id.btn3: createMutilDialog(); break; case R.id.btn4: createDateDialog(); break; case R.id.btn5: createTimeDialog(); break; case R.id.btn6: createProgressBarDialog(); break; } } /** * 创建一个进度条弹窗 */ private void createProgressBarDialog() { //创建进度条弹窗对象 ProgressDialog progressDialog = new ProgressDialog(this); //设置标题 progressDialog.setTitle("进度条弹窗"); //设置标题图标 progressDialog.setIcon(R.mipmap.ic_launcher); //设置文本 progressDialog.setMessage("正在加载..."); //设置最大进度 progressDialog.setMax(100); //设置进度条的类型 progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); //显示进度条弹窗 progressDialog.show(); //如果设置这条语句的话,那么无论你点击屏幕外的任何地方或者按返回键都取消不了这个弹窗, //除非在完成进度后,设置取消事件。一般情况这种设置方式对界面很不友好 //不过有时候软件有重大bug,用户不得不更新该软件,如果不更新,就只能 //强制退出程序了// progressDialog.setCancelable(false);//不允许被某些方式取消,比如按对话框之外的区域或者是返回键 progressDialog.setProgress(50); } /** * 创建一个日期弹窗 */ private void createDateDialog() { new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() { /** * * @param view 当前日期选择的 view * @param year 当前选择的年 * @param monthOfYear 当前选择的月,从0开始算 * @param dayOfMonth,当前选择的日,从1开始算 */ @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { Toast.makeText(MainActivity.this, "view = " + view + "年:" + year + "月:" + monthOfYear + "日" + dayOfMonth, Toast.LENGTH_SHORT).show(); } }, 2016, 7, 15)//这里注意一下的是月份系统表示的是从0开始的,0表示1月,1表示2月.....11表示12月 .show(); } /** * 创建一个时间弹窗 */ private void createTimeDialog() { new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() { /** * * @param view 当前时间选择的view * @param hourOfDay 小时 * @param minute 分钟 */ @Override public void onTimeSet(TimePicker view, int hourOfDay, int minute) { Toast.makeText(MainActivity.this, "时间弹窗 view = " + view + "hourOfDay = " + hourOfDay + "minute = " + minute, Toast.LENGTH_SHORT).show(); } }, 11, 22, true) .show(); } /** * 创建一个多选弹窗 */ private void createMutilDialog() { new AlertDialog.Builder(this) .setTitle("多选弹框") .setIcon(R.mipmap.ic_launcher) //第二个参数 boolean数组, 如果写 null 代表默认全部是非选中, 如果想指定某几个选中, //需要创建对应长度的数据,按照位置的顺序,将指定位置设置为 true 即可, 数组长度不能小 //于数据源的长度,否则会越界,但是可以大于数据源的长度 .setMultiChoiceItems(R.array.list, new boolean[]{true, false, false, true, false, false, false, false, false, false, false, false, false}, new DialogInterface.OnMultiChoiceClickListener() { /** * * @param dialog 当前点击的对话框 * @param which 当前点击的条目 * @param isChecked 被点击条目的选中状态 */ @Override public void onClick(DialogInterface dialog, int which, boolean isChecked) { Toast.makeText(MainActivity.this, "当前点击的是" + which + " 是否选中" + isChecked, Toast.LENGTH_SHORT).show(); } }) //设置取消按钮,并且设置监听事件 .setNegativeButton("cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }) //确认按钮,默认点击会直接取消该窗口 .setPositiveButton("sure", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }) .setCancelable(false) .show(); } /** * 创建一个单选弹窗 */ private void createSingleDialog() { new AlertDialog.Builder(this) .setTitle("单选弹窗") .setIcon(R.mipmap.ic_launcher) //构造参数, 1 数据源,2 默认被选中的索引,3 条目的点击事件 .setSingleChoiceItems(R.array.list, 1, new DialogInterface.OnClickListener() { /** * * @param dialog 当前的对话框 * @param which 当前点击的是列表的第几个 item */ @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "单选弹窗 dialog = " + dialog + "which = " + which, Toast.LENGTH_SHORT).show(); } }) .setNegativeButton("cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); } }) .setPositiveButton("sure", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }) .setCancelable(false)//不允许被某些方式取消,比如按对话框之外的区域或者是返回键 .show(); } /** * 创建一个列表弹窗 */ private void createListDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("列表弹窗"); builder.setItems(R.array.list, new DialogInterface.OnClickListener() { /** * * @param dialog 当前的对话框 * @param which 当前点击的是列表的第几个 item */ @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "列表 dialog = " + dialog + "which = " + which, Toast.LENGTH_SHORT).show(); } }); builder.setCancelable(false);//不允许被某些方式取消,比如按对话框之外的区域或者是返回键 builder.show(); }} |
列表弹窗:

单选弹窗:

多选弹窗:

日期弹窗:

时间弹窗:

进度条弹窗:

差不多常见的几种都在这里了,至于还有一个PopupWindow这里暂时不作介绍。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
如对本文有疑问,请提交到交流社区,广大热心网友会为你解答!! 点击进入社区
您可能感兴趣的文章:
相关文章
- 2016-05-05Android手机开发 使用线性布局和相对布局实现Button垂直水平居中
- 2013-05-05android控件之WebView控件缩小
- 2017-04-04Android中RecyclerView实现分页滚动的方法详解
- 2016-08-08轻松实现安卓(Android)九宫格解锁
- 2017-06-06android隐式意图激活自定义界面和系统应用界面的实例
- 2016-03-03Android 网络状态实时监听代码实例(一)
- 2017-06-06Android 获取传感器列表整理及简单实例
- 2015-11-11Android编程之消息机制实例分析
- 2015-04-04android中圆角图像生成方法
- 2013-09-09android TextView多行文本(超过3行)使用ellipsize属性无效问题的
(转载)Android UI设计之AlertDialog弹窗控件的更多相关文章
- 【转】android UI进阶之自定义组合控件
[源地址]http://blog.csdn.net/notice520/article/details/6667827 好久没写博客了.实在是忙不过来,不过再不总结总结真的不行了.慢慢来吧,有好多需要 ...
- 【转】【Android UI设计与开发】之详解ActionBar的使用,androidactionbar
原文网址:http://www.bkjia.com/Androidjc/895966.html [Android UI设计与开发]之详解ActionBar的使用,androidactionbar 详解 ...
- (转载) Android 带清除功能的输入框控件ClearEditText,仿IOS的输入框
Android 带清除功能的输入框控件ClearEditText,仿IOS的输入框 标签: Android清除功能EditText仿IOS的输入框 2013-09-04 17:33 70865人阅读 ...
- 【Android UI设计与开发】第05期:引导界面(五)实现应用程序只启动一次引导界面
[Android UI设计与开发]第05期:引导界面(五)实现应用程序只启动一次引导界面 jingqing 发表于 2013-7-11 14:42:02 浏览(229501) 这篇文章算是对整个引导界 ...
- 详解 “Android UI”设计官方教程
我们曾经给大家一个<MeeGo移动终端设备开发UI设计基础教程>,同时很多朋友都在寻找Android UI开发的教程,我们从Android的官方开发者博客找了一份幻灯片,介绍了一些Andr ...
- 移动周报:十款最实用的Android UI设计工具
上一周可以说是一个不断Mark周,从最实用的Android UI设计工具.免费移动应用测试框架推荐,到HTML5开发框架等等,各种开发工具.框架精彩丰呈,看得小伙伴们是不亦乐乎.当然,还有不容错过的M ...
- shape和selector是Android UI设计中经常用到的
shape和selector是Android UI设计中经常用到的,比如我们要自定义一个圆角Button,点击Button有些效果的变化,就要用到shape和selector.可以这样说,shape和 ...
- Android UI设计
Android UI设计--PopupWindow显示位置设置 摘要: 当点击某个按钮并弹出PopupWindow时,PopupWindow左下角默认与按钮对齐,但是如果PopupWindow是下图的 ...
- Android UI设计的基本元素有哪些
在android app开发如火如荼的今天,如何让自己的App受人欢迎.如何增加app的下载量和使用量....成为很多android应用开发前,必须讨论的问题.而ui设计则是提升客户视觉体验度.提升下 ...
随机推荐
- iris中间件
最近使用golang写的时候涉及到权限校验,用中间件(使用iris框架内的东西) 自己摸索出一种自己的方式 iris.UseFunc(MiddlewareFunc)使用这个方法,会在所有的请求之前执行 ...
- CaffeExample 在CIFAR-10数据集上训练与测试
本文主要来自Caffe作者Yangqing Jia网站给出的examples. @article{jia2014caffe, Author = {Jia, Yangqing and Shelhamer ...
- ubuntu16.04 安装 docker
1,切换到root 2,更新系统 # apt-get update 3,安装 https和ca证书 # apt-get install apt-transport-https ca-certifica ...
- svn中有的代码被标注黄色,绿色和红色,分别表示什么意思呢?
1.红色感叹号表示这个文件从服务器上下载下来以后,在本地被修改过.这时执行提交操作就可以了.2.黄色感叹号表示这个文件在提交的时候发现存在冲突,也就是说有别人在你提交之前对这个文件的同一个版本进行了修 ...
- swfupload组件上传文件
前段时间做文件上传用的是H5的一个插件,由于浏览器的兼容性不好,所以又换了一个Flash版本的上传文件插件,感觉这个上传插件的使用方式跟H5的差不多,有些雷同.不过,由于后续浏览不再支持Flash(略 ...
- zabbix、agent端服务器图形化展示
[root@agent ~]# cat /etc/hostname agent.zabbix.com [root@agent ~]# cat /etc/hosts 127.0.0.1 localh ...
- 04 SqlServer
数据库的注释 –(两个横线) 主键表 外键表 主键,组合主键 SqlServer 使用附加 权限 主文件mdf 日志文件ldf 数据类型 char varchar nchar nvarchar cha ...
- HDU 2669 Romantic( 拓欧水 )
链接:传送门 题意:求解方程 X * a + Y * b = 1 的一组最小非负 X 的解,如果无解输出 "sorry" 思路:裸 exgcd /***************** ...
- python学习(一):python基础
python两种执行方式: python解释器:py文件路径 python进入解释器:实时输入并获取执行结果 解释器路径: 在linux系统中,python文件在头部加上#!/usr/bin/env ...
- 新手学python-Day4-作业
购物车程序 要求: 1.启动程序后,让用户输入工资,然后打印商品列表 2.允许用户根据商品编号购买商品 3.用户选择商品后,检查余额是否足够,够了就扣款,不够就提醒 4.可随时退出,退出时,打印已购买 ...