效果图:

 

1、activity_main.xml

  描述:

    a、定义了一个消息提示框按钮

      点击按钮弹出消息

    b、定义了一个选择城市的输入框

      点击按钮选择城市

    c、定义了一个单选提示框按钮

      点击按钮选择某项内容

    d、定义了一个多选提示框按钮

      点击按钮选择多项内容

    e、定义了一个选择入职日期的输入框

      点击按钮选择入职日期

    f、定义了一个选择上班时间的输入框

      点击按钮选择时间

    g、定义了一个进度条对话框按钮

      点击按钮进行文件下载

    h、定义了一个用户登录的按钮

      点击按钮进行用户登录

  点击这些按钮,弹出对话框完成相应的操作

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:id="@+id/activity_scrollview"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:scrollbars="vertical"
  7. >
  8. <LinearLayout
  9. android:layout_width="match_parent"
  10. android:layout_height="match_parent"
  11. android:orientation="vertical"
  12. >
  13. <Button
  14. android:layout_width="match_parent"
  15. android:layout_height="wrap_content"
  16. android:text="消息提示框"
  17. android:onClick="test_1"
  18. />
  19. <EditText
  20. android:layout_width="match_parent"
  21. android:layout_height="wrap_content"
  22. android:id="@+id/city"
  23. android:hint="请选择城市"
  24. android:gravity="center"
  25. android:onClick="test_2"
           <!--输入框提示信息的颜色为绿色-->
  26. android:textColorHint="@android:color/holo_green_light"
  27. />
  28. <Button
  29. android:layout_width="match_parent"
  30. android:layout_height="wrap_content"
  31. android:text="单选提示框"
  32. android:onClick="test_3"
  33. />
  34. <Button
  35. android:layout_width="match_parent"
  36. android:layout_height="wrap_content"
  37. android:text="多选提示框"
  38. android:onClick="test_4"
  39. />
  40. <EditText
  41. android:layout_width="match_parent"
  42. android:layout_height="wrap_content"
  43. android:id="@+id/intime"
  44. android:hint="入职日期"
  45. android:gravity="center"
  46. android:onClick="test_5"
  47. android:textColorHint="@android:color/holo_green_light"
  48. />
  49. <EditText
  50. android:layout_width="match_parent"
  51. android:layout_height="wrap_content"
  52. android:id="@+id/workingTime"
  53. android:hint="上班时间"
  54. android:gravity="center"
  55. android:onClick="test_6"
  56. android:textColorHint="@android:color/holo_green_light"
  57. />
  58. <Button
  59. android:layout_width="match_parent"
  60. android:layout_height="wrap_content"
  61. android:text="进度条对话框"
  62. android:onClick="test_7"
  63. />
  64. <Button
  65. android:layout_width="match_parent"
  66. android:layout_height="wrap_content"
  67. android:text="用户登录"
  68. android:onClick="test_8"
  69. />
  70. </LinearLayout>
  71. </ScrollView>

2、activity_main.xml

  1. package com.nf.android_dialog;
  2.  
  3. import android.annotation.TargetApi;
  4. import android.app.Activity;
  5. import android.app.AlertDialog;
  6. import android.app.DatePickerDialog;
  7. import android.app.ProgressDialog;
  8. import android.app.TimePickerDialog;
  9. import android.content.DialogInterface;
  10. import android.icu.util.Calendar;
  11. import android.os.Build;
  12. import android.os.Bundle;
  13. import android.os.SystemClock;
  14. import android.view.LayoutInflater;
  15. import android.view.View;
  16. import android.widget.DatePicker;
  17. import android.widget.EditText;
  18. import android.widget.TimePicker;
  19. import android.widget.Toast;
  20.  
  21. public class MainActivity extends Activity {
  22. private EditText ucity,intime,workTime;
  23. @Override
  24. protected void onCreate(Bundle savedInstanceState) {
  25. super.onCreate(savedInstanceState);
  26. setContentView(R.layout.activity_main);
  27. ucity = (EditText)findViewById(R.id.city);
  28. intime = (EditText)findViewById(R.id.intime);
  29. workTime = (EditText)findViewById(R.id.workingTime);
  30. }
  31. //消息提示框
  32. public void test_1(View view){
  33. //在当前Activity中构建一个对话框Builder对象
  34. final AlertDialog.Builder builder = new AlertDialog.Builder(this);
  35. //设置builder将要构建的Dialog属性
         //设置对话框的标题
  36. builder.setTitle("消息");
         //设置对话框的主要内容
  37. builder.setMessage("今天12点,大家一起吃饭");
         //设置对话框上的图标
  38. builder.setIcon(R.mipmap.ic_launcher);
         //对话框中绑定确定按钮
         //当点击确定按钮是,new一个DialogInterface的单击监听事件的方法
  39. builder.setPositiveButton("确定",new DialogInterface.OnClickListener(){
  40. @Override
  41. public void onClick(DialogInterface dialogInterface,int i){
              //当点击按钮时,弹出对话内容“你点击了确定按钮”
  42. Toast.makeText(MainActivity.this,"你点击了确定按钮",Toast.LENGTH_SHORT).show();
  43. }
  44. });
         //对话框中绑定取消按钮
  45. builder.setNegativeButton("取消",null);
  46. //生产Dialog
         //调用Builder对象的create()方法创建AlertDialog对象
  47. AlertDialog dialog = builder.create();
         //调用AlertDialog对象的show()方法将对话框显示出来
  48. dialog.show();
  49. }
  50. //列表对话框
  51. //构建数据
  52. String[] citys = {"北京","上海","广州","中山","珠海"};//数组
  53. public void test_2(View view){
         //当点击选择城市输入框时,在当前Activity中构建一个对话框Builder对象
  54. AlertDialog.Builder builder = new AlertDialog.Builder(this);
         //设置对话框标题
  55. builder.setTitle("选择城市");
         //设置对话框图标
  56. builder.setIcon(R.mipmap.ic_launcher);
         //设置列表的项,传入citys输入,new一个点击监听事件的方法
  57. builder.setItems(citys,new DialogInterface.OnClickListener(){
  58. @Override
  59. public void onClick(DialogInterface dialogInterface,int i){
              //当点击了某一项后,弹出提示,你选择了某个城市
  60. Toast.makeText(MainActivity.this,"你选择了"+citys[i],Toast.LENGTH_SHORT).show();
  61. //不仅将选择的内容弹出来,还要将内容绑定到输入框中
              ucity.setText(citys[i]);
  62. ucity.setSelection(citys[i].length());
  63. }
  64. });
         
  65. builder.create().show();
  66. }
  67. //单选提示框
  68. int selectedIndex = -1;
  69. public void test_3(View view){
         //同上构建builder对象
  70. AlertDialog.Builder builder = new AlertDialog.Builder(this);
         //标题
  71. builder.setTitle("请选择城市");
         //图标
  72. builder.setIcon(R.mipmap.ic_launcher);
         //设置单选按钮,传入citys数据,1,表示默认选中第二项
  73. builder.setSingleChoiceItems(citys,1,new DialogInterface.OnClickListener(){
  74. @Override
  75. public void onClick(DialogInterface dialogInterface,int i){
  76. selectedIndex = i;//记录被选中的下标
  77. }
  78. });
         //绑定按钮
  79. builder.setPositiveButton("确认",new DialogInterface.OnClickListener(){
  80. @Override
  81. public void onClick(DialogInterface dialogInterface,int i){
  82. if (selectedIndex>=0){
                //当点击确认按钮后弹出选择的内容
  83. Toast.makeText(MainActivity.this,"你选择了:"+citys[selectedIndex],Toast.LENGTH_SHORT).show();
  84. }
  85. }
  86. });
         //绑定取消按钮
  87. builder.setNegativeButton("取消",null);
  88. builder.create().show();
  89. }
  90. //多选提示框
      //默认多选按钮的每一项都未被选中
  91. boolean[] selected = {false,false,false,false,false};
  92. public void test_4(View view){
         //同上
  93. AlertDialog.Builder builder = new AlertDialog.Builder(this);
  94. builder.setTitle("请选择城市");
  95. builder.setIcon(R.mipmap.ic_launcher);
  96. //设置为复选框,传入citys数据,selected表示多选按钮的状态都为false
  97. builder.setMultiChoiceItems(citys,selected,new DialogInterface.OnMultiChoiceClickListener(){
  98. @Override
  99. public void onClick(DialogInterface dialogInterface,int i,boolean b){
  100. if (b){
                //如果项被选中,则将该项的值设置为b,b代表true;
  101. selected[i] = b;
  102. }
  103. }
  104. });
  105. builder.setPositiveButton("确认",new DialogInterface.OnClickListener(){
  106. @Override
  107. public void onClick(DialogInterface dialogInterface,int i){
             //创建缓存
  108. StringBuffer sb = new StringBuffer();
             //通过循环遍历将所有为true选项的citys中的数据追加到缓存中
  109. for (int j=0;j<selected.length;j++){
  110. if (selected[j]){
  111. sb.append(citys[j]+",");
  112. }
  113. }  
              //判断缓存中是否有值
  114. if (sb.length()>0){
                //如果有值则将缓存中的值进行截取字符串,减1是为了除去最后一个逗号
  115. String newStr = sb.substring(0,sb.length() - 1);
                //然后将截取到的字符串弹出来
  116. Toast.makeText(MainActivity.this,"你选择了:"+newStr,Toast.LENGTH_SHORT).show();
  117. }
  118. }
  119. });
         //设置取消按钮
  120. builder.setNegativeButton("取消",null);
  121. builder.create().show();
  122. }
  123. //日期对话框
  124. @TargetApi(Build.VERSION_CODES.N)
  125. public void test_5(View view){
  126. //构建一个日历对象
  127. Calendar cal = Calendar.getInstance();//当前日期
  128. //2个月后的今天日期是多少
  129. cal.add(Calendar.MONTH,2);
         //创建日历对话框,设置选择日期的监听事件的方法
  130. DatePickerDialog dialog = new DatePickerDialog(this,new DatePickerDialog.OnDateSetListener() {
  131. //参数i表示数字年,参数i1表示数字月,参数i2表示数字日
           @Override
  132. public void onDateSet(DatePicker datePicker, int i, int i1, int i2) {
  133. //给ui组件绑定选中的日期
              intime.setText(i + "-" + (i1 + 1) + "-" + i2);
  134. intime.setSelection(intime.getText().length());
  135. }
  136. },cal.get(Calendar.YEAR),cal.get(Calendar.MONTH),cal.get(Calendar.DATE)+1);
  137. //显示日历对话框
        dialog.show();
  138. }
  139. //时间对话框
  140. @TargetApi(Build.VERSION_CODES.N)
  141. public void test_6(View view){
  142. //构建一个日历对象
  143. Calendar cal = Calendar.getInstance();//当前日期
         //在当前Activity中构建一个时间对象,并监听选择的时间
  144. TimePickerDialog dialog = new TimePickerDialog(this,new TimePickerDialog.OnTimeSetListener() {
  145. //参数i表示数字小时,参数i1表示数字分钟
           @Override
  146. public void onTimeSet(TimePicker timePicker, int i, int i1) {
              //设置时间显示的字符串格式
  147. String time = i + ":" + i1;
              //将时间绑定到UI输入框中
  148. workTime.setText(time);
  149. }
  150. },cal.get(Calendar.HOUR)+1,cal.get(Calendar.MINUTE),true);
  151. dialog.show();
  152. }
  153. //定义进度条对话框
  154. ProgressDialog progressDialog;
  155. boolean isRun = true;
  156. int i = 1;
  157. public void test_7(View view){
  158. i=1;
         //当点击按钮后就进行下载
  159. isRun = true;
         //在当前Activity中实例化一个进度条对话框
  160. progressDialog = new ProgressDialog(this);
         //设置标题
  161. progressDialog.setTitle("下载");
         //设置图标
  162. progressDialog.setIcon(R.mipmap.ic_launcher);
  163. progressDialog.setMessage("文件正在下载中.....");
  164.  
  165. //控制进度条样式风格,这里是条形风格,还可以设置圆圈分隔等
  166. progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
         //设置一个按钮,当点击取消下载
  167. progressDialog.setButton(ProgressDialog.BUTTON_NEGATIVE,"取消下载",new DialogInterface.OnClickListener(){
  168. @Override
  169. public void onClick(DialogInterface dialogInterface,int i){
              //则停止进度
  170. isRun = false;
              //并将进度重新设置为0
  171. i=0;
  172. }
  173. });
         //显示进度条对话框
  174. progressDialog.show();
  175. //开始执行下载操作
  176. new Thread(new Runnable() {
  177. @Override
  178. public void run() {
  179. while (isRun){
  180. runOnUiThread(new Runnable() {
  181. @Override
  182. public void run() {
  183. progressDialog.setMessage("文件已下载"+i+"%");
  184. }
  185. });
  186. //设置进度
  187. progressDialog.setProgress(i);
  188. SystemClock.sleep(100);
  189. i++;
                //如果i大于100,则停止下载,并提示文件下载完毕
  190. if (i>100){
  191. isRun = false;
  192. runOnUiThread(new Runnable() {
  193. @Override
  194. public void run() {
  195. progressDialog.setMessage("文件已下载完毕");
  196. }
  197. });
                  //休眠1秒,关闭对话框
  198. SystemClock.sleep(1000);
  199. progressDialog.dismiss();
  200. }
  201. }
  202. }
  203. }).start();
  204. }
  205. //自定义对话框
  206. private EditText uname,upwd;
  207. public void test_8(View view){
  208. //获取LayoutInflater对象
  209. LayoutInflater inflater = LayoutInflater.from(this);
  210. //通过投影加载自定义Dialog布局View
  211. View layout = inflater.inflate(R.layout.layout_dialog_login,null);
  212. uname = (EditText)layout.findViewById(R.id.uname);
  213. upwd = (EditText)layout.findViewById(R.id.upwd);
  214. //构建对话框
  215. AlertDialog.Builder builder = new AlertDialog.Builder(this);
  216. builder.setTitle("用户登录");
  217. builder.setIcon(R.mipmap.ic_launcher);
  218. //设置View,将投影加载到的布局绑定到对话框
  219. builder.setView(layout);
  220. //设置button
  221. builder.setPositiveButton("登录",new DialogInterface.OnClickListener(){
  222. @Override
  223. public void onClick(DialogInterface dialogInterface,int i){
              //当点击登录按钮后,获取用户名和密码输入框中的文本,转化为字符串
  224. String name = uname.getText().toString();
  225. String pwd = upwd.getText().toString();
              //弹出信息
  226. Toast.makeText(MainActivity.this,"用户名:"+name+",密码:"+pwd,Toast.LENGTH_SHORT).show();
  227. }
  228. });
  229. builder.setNeutralButton("注册",null);
  230. builder.setNeutralButton("取消",null);
  231. builder.create().show();
  232. }
  233. }

3、layout_dialog_login.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:layout_margin="10dp">
  7. <TextView
  8. android:layout_width="match_parent"
  9. android:layout_height="wrap_content"
  10. android:text="用户名:"
  11. android:textSize="15sp"
  12. />
  13. <EditText
  14. android:layout_width="match_parent"
  15. android:layout_height="50dp"
  16. android:id="@+id/uname"
  17. android:hint="请输入用户名"
  18. />
  19. <TextView
  20. android:layout_width="match_parent"
  21. android:layout_height="wrap_content"
  22. android:text="密 码:"
  23. android:textSize="15sp"
  24. />
  25. <EditText
  26. android:layout_width="match_parent"
  27. android:layout_height="50dp"
  28. android:id="@+id/upwd"
  29. android:inputType="textPassword"
  30. android:hint="请输入密码"
  31. />
  32. </LinearLayout>

Android开发 ---构建对话框Builder对象,消息提示框、列表对话框、单选提示框、多选提示框、日期/时间对话框、进度条对话框、自定义对话框、投影的更多相关文章

  1. Android开发学习之路--异步消息Handler,Message,Looper和AsyncTask之初体验

    在简易音乐播放器中,用了Handler,也没有过多地去研究学习,这里再学习下android下的异步消息处理机制.这里用了Handler主要是在线程中不能更新UI,而需要通过Handler才可以.关于异 ...

  2. Android开发 ---基本UI组件2:图像按钮、单选按钮监听、多选按钮监听、开关

    Android开发 ---基本UI组件2 1.activity_main.xml 描述: 定义一个按钮 <?xml version="1.0" encoding=" ...

  3. Android开发——构建自定义组件

    Android中,你的应用程序程序与View类组件有着一种固定的联系,例如按钮(Button). 文本框(TextView), 可编辑文本框(EditText), 列表框(ListView), 复选框 ...

  4. Android开发——使用intent传递对象

    intent传递对象有两种方法: 方式一:Serializable 方式 方式二:Parcelable方式 在这里不多介绍了,这一篇就是快速上手使用教程,至于详细原理介绍的,请看这一篇http://w ...

  5. Android开发学习之路-Handler消息派发机制源码分析

    注:这里只是说一下sendmessage的一个过程,post就类似的 如果我们需要发送消息,会调用sendMessage方法 public final boolean sendMessage(Mess ...

  6. Android开发 - 下拉刷新和分段头悬停列表

    项目源码 本文所述项目已开源,源码地址 为什么做PullToRefresh-PinnedSection-ListView 前段时间因为项目需求,需要在Android中对ListView同时增加下拉刷新 ...

  7. Android开发之使用BaseAdapter的notifyDataSetChanged()无法更新列表

    在做一个通讯录的app,使用BaseAdapter作为adapter.重写了getCount().getItem().getItemId() .getView()方法. 因为新建联系人在第二个acti ...

  8. Android Studio常见对话框(普通对话框、单选对话框、多选对话框、进度条对话框、消息对话框、自定义对话框)

    Android Studio常见对话框(普通对话框.单选对话框.多选对话框.进度条对话框.消息对话框.自定义对话框) 1.普通对话框 2.单选对话框 3.多选对话框 4.进度条对话框 5.消息对话框 ...

  9. Android开发学习笔记-自定义对话框

    系统默认的对话框只能显示简单的标题内容以及按钮,而如果想要多现实其他内容则就需要自定义对话框,下面是自定义对话框的方法. 1.先定义对话框的模版 <?xml version="1.0& ...

随机推荐

  1. GDscript风格指南

    (惯例感谢godot开发组~~·) 缩进 缩进类型:Tabs (编辑器默认) 缩进大小:4 (编辑器默认) 每个缩进级别必须大于包含它的代码块. 良好的: for i in range(10): pr ...

  2. sitecore开发入门Sitecore的CRUD操作 - 第一部分

    在本文中,讨论如何使用Sitecore.Data.Items.Item并对这些项执行CRUD(创建,读取,更新和删除)操作.我还将介绍如何使用Glass和Fortis类库进行相同的操作,这些操作都是对 ...

  3. 外网访问ARM嵌入式Linux系统

    外网访问ARM嵌入式Linux系统 实验室里的ARM嵌入式Linux系统,只能在局域网内访问,怎样从外网也能访问ARM嵌入式Linux系统? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并 ...

  4. iOS项目之苹果审核被拒

    解读: 3.2 其他业务模式问题下方列表并非详尽清单,并且您提交的 App 可能会导致我们的政策有所更改或更新,但这里有一些额外的应做事宜和勿做事宜需要您谨记在心: 可以接受 (i)在您的 App 中 ...

  5. LeetCode #003# Longest Substring Without Repeating Characters(js描述)

    索引 思路1:分治策略 思路2:Brute Force - O(n^3) 思路3:动态规划? O(n^2)版,错解之一:420 ms O(n^2)版,错解之二:388 ms O(n)版,思路转变: 1 ...

  6. nginx-编译安装 第一章

    nginx 第一章:编译安装 nginx 官网网站:http://nginx.org/en/ 1.基础说明 基本HTTP服务器功能其他HTTP服务器功能邮件代理服务器功能TCP/UDP代理服务器功能体 ...

  7. 剑指offer(3)从尾到头打印链表

    题目描述 输入一个链表,从尾到头打印链表每个节点的值. 题目分析 比较简单,主要注意下从尾到头,可以用栈可以用递归,我给出我比较喜欢的代码吧 代码 /* function ListNode(x){ t ...

  8. Codeforces 17E Palisection - Manacher

    题目传送门 传送点I 传送点II 传送点III 题目大意 给定一个串$s$询问,有多少对回文子串有交. 好像很简单的样子. 考虑能不能直接求,感觉有点麻烦.因为要考虑右端点在当前回文子串内还有区间包含 ...

  9. 利用jQuery实现用户名片小动画

    我爱撸码,撸码使我感到快乐!大家好,我是Counter.下面给大家介绍利用jQuery实现的小动画,非常的简便,如果有原生js操作的话,那么就不止这么多行了.至于CSS,个人觉得,这边CSS布局也蛮重 ...

  10. Springboot解决war包放到Tomcat服务器上404的特殊情况

    Springboot解决war包放到Tomcat服务器上404的特殊情况 原文链接:https://www.cnblogs.com/blog5277/p/9330577.html 原文作者:博客园-- ...