Android(java)学习笔记140:常用的对话框
一、常见对话框属性:
1. AlertDialog.Builder属性
• setTitle: 为对话框设置标题 ;
• setIcon : 为对话框设置图标;
• setMessage: 为对话框设置内容;
• setView : 给对话框设置自定义样式 ;
• setItems: 设置对话框要显示的一个list,一般用于显示几个命令时;
• setMultiChoiceItems:用来设置对话框显示一系列的复选框;
• setNeutralButton : 响应中立行为的点击;
• setPositiveButton : 响应Yes/Ok的点击 ;
• setNegativeButton :响应No/Cancel的点击 ;
• create : 创建对话框 ;
• show : 显示对话框;
2. ProgressDialog属性
• setProgressStyle: 设置进度条风格,风格为圆形,旋转的;
• setTitlt: 设置ProgressDialog 标题;
• setMessage: 设置ProgressDialog提示信息;
• setIcon: 设置ProgressDialog标题图标;
• setIndeterminate: 设置ProgressDialog 的进度条是否不明确;
• setCancelable: 设置ProgressDialog 是否可以按返回键取消;
• setButton: 设置ProgressDialog 的一个Button(需要监听Button事件);
• show: 显示ProgressDialog。
二、常见对话框案例演示:
1.确认取消对话框:
AlertDialog.Builder builder = new Builder(this);
// 告诉工厂生产什么样的产品
builder.setTitle("友情提醒");
builder.setMessage("若练此功,必先自宫,是否继续?");
builder.setPositiveButton("好的,想好了", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "啊。。。", 0).show();
Toast.makeText(MainActivity.this, "及时自宫,也不一定成功", 0).show();
}
});
builder.setNegativeButton("想想再说", new OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "若不自宫,一定不成功", 0).show();
}
});
builder.create().show();
builder.create().show();
这里的只有工厂(AlertDialog.Builder)先创建create()出来AlertDialog然后我们才能show()出来;
这里我们看看create()方法的源码如下:
public AlertDialog create() {
final AlertDialog dialog = new AlertDialog(P.mContext, mTheme, false);
P.apply(dialog.mAlert);
dialog.setCancelable(P.mCancelable);
if (P.mCancelable) {
dialog.setCanceledOnTouchOutside(true);
}
dialog.setOnCancelListener(P.mOnCancelListener);
if (P.mOnKeyListener != null) {
dialog.setOnKeyListener(P.mOnKeyListener);
}
return dialog;
}
返回一个AlertDialog,然后我们再看看show()的源码如下:
public AlertDialog show() {
AlertDialog dialog = create();
dialog.show();
return dialog;
}
我们发现这里show()中其实也先实现了create(),,所以上面的:
builder.create().show();其实可以改写成:builder.show();
运行的效果如下:

2.单选对话框
// 工厂模式。
AlertDialog.Builder builder = new Builder(this);
// 告诉工厂生产什么样的产品
builder.setTitle("请选择性别:");
final String[] items = { "男", "女", "未知" };
builder.setSingleChoiceItems(items, 2, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();// 关闭对话框
Toast.makeText(MainActivity.this, "您的性别:" + items[which], 0)
.show();
}
});
builder.show();
setSingleChoiceItems(CharSequence[] items, int checkedItem, final OnClickListener listener)方法来实现类似RadioButton的AlertDialog
第一个参数是要显示的数据的数组;
第二个参数是初始值(初始被选中的item);
第三个参数是点击某个item的触发事件;
这里OnClickListener里面方法public void onClick(DialogInterface dialog, int which):
第一个参数:用来系统确定对话框(程序中出现多个对话框的时候,系统靠的就是这个参数DialogInterface dialog来确定我们点击的对话框);
第二个参数:用来系统确定我们点击选择的对话框中的子项目;
运行的效果如下:

3. 多选对话框
// 工厂模式。
AlertDialog.Builder builder = new Builder(this);
// 告诉工厂生产什么样的产品
builder.setTitle("请选择您喜欢的水果:");
final String[] items = { "苹果", "香蕉", "葡萄", "橘子" };
final boolean[] result = new boolean[] { true, true, false, false };
builder.setMultiChoiceItems(items, result,
new OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which,
boolean isChecked) {
result[which] = isChecked;
Toast.makeText(MainActivity.this,
items[which] + isChecked, 0).show();
}
});
builder.setPositiveButton("提交", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < result.length; i++) {
if (result[i]) {
sb.append(items[i] + ",");
}
}
Toast.makeText(MainActivity.this, "您喜欢:" + sb.toString(), 0)
.show();
}
});
builder.show();
public Builder setMultiChoiceItems(CharSequence[] items, boolean[] checkedItems, final OnMultiChoiceClickListener listener)
第一个参数:指定我们要显示的一组下拉多选框的数据集合
第二个参数:代表哪几个选项被选择,如果是null,则表示一个都不选择,如果希望指定哪一个多选选项框被选择,
需要传递一个boolean[]数组进去,其长度要和第一个参数的长度相同,例如 {true, false, false, true};
第三个参数:给每一个多选项绑定一个监听器
这里的监听器OnMultiChoiceClickListener 中的方法: public void onClick(DialogInterface dialog, int which,boolean isChecked)
第一个参数:用来确定此处工厂模式创建的对话框;
第二个参数:用来确定对话框中我们点击的子项;
第三个参数:用来判别对话框的子项的点击状态(true:表示子项选择;false:表示子项没有被选择)
运行效果:

4.进度对话框
(1)圆形进度条
final ProgressDialog pd = new ProgressDialog(this);
pd.setTitle("提醒");
pd.setMessage("正在处理中。。。请稍后");
pd.show();
new Thread() {
public void run() {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
pd.dismiss();
};
}.start();
运行效果:

(2)水平进度条
final ProgressDialog pd = new ProgressDialog(this);
// 设置进度的样式
pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pd.setTitle("提醒");
pd.setMessage("正在处理中。。。请稍后");
pd.show();
new Thread() {
public void run() {
pd.setMax(100);
try {
for (int i = 0; i <= 100; i++) {
pd.setProgress(i);
Thread.sleep(500);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
pd.dismiss();
};
}.start();
运行结果:

5.上面代码都是我案例一部分代码,附上的案例程序如下:
(1)activity_main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" > <Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="click01"
android:text="确定取消对话框" /> <Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="click02"
android:text="单选对话框" /> <Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="click03"
android:text="多选对话框" /> <Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="click04"
android:text="进度对话框" /> <Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="click05"
android:text="进度对话框" /> </LinearLayout>
布局效果:

(2)接下来就是:MainAcitivity.java:
package com.itheima.dialogset; import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.DialogInterface.OnMultiChoiceClickListener;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
} /**
* 确定取消对话框
*
* @param view
*/
public void click01(View view) {
// 工厂模式。
AlertDialog.Builder builder = new Builder(this);
// 告诉工厂生产什么样的产品
builder.setTitle("友情提醒");
builder.setMessage("若练此功,必先自宫,是否继续?");
builder.setPositiveButton("好的,想好了", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "啊。。。", 0).show();
Toast.makeText(MainActivity.this, "及时自宫,也不一定成功", 0).show();
}
});
builder.setNegativeButton("想想再说", new OnClickListener() { @Override
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "若不自宫,一定不成功", 0).show();
}
});
builder.show();
} /**
* 单选对话框
*
* @param view
*/
public void click02(View view) {
// 工厂模式。
AlertDialog.Builder builder = new Builder(this);
// 告诉工厂生产什么样的产品
builder.setTitle("请选择性别:");
final String[] items = { "男", "女", "未知" };
builder.setSingleChoiceItems(items, 2, new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();// 关闭对话框
Toast.makeText(MainActivity.this, "您的性别:" + items[which], 0)
.show();
}
});
builder.show();
} /**
* 多选对话框
*
* @param view
*/
public void click03(View view) {
// 工厂模式。
AlertDialog.Builder builder = new Builder(this);
// 告诉工厂生产什么样的产品
builder.setTitle("请选择您喜欢的水果:");
final String[] items = { "苹果", "香蕉", "葡萄", "橘子" };
final boolean[] result = new boolean[] { true, true, false, false };
builder.setMultiChoiceItems(items, result,
new OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which,
boolean isChecked) {
result[which] = isChecked;
Toast.makeText(MainActivity.this,
items[which] + isChecked, 0).show();
}
});
builder.setPositiveButton("提交", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < result.length; i++) {
if (result[i]) {
sb.append(items[i] + ",");
}
}
Toast.makeText(MainActivity.this, "您喜欢:" + sb.toString(), 0)
.show();
}
});
builder.show();
} /**
* 进度对话框
*
* @param view
*/
public void click04(View view) {
final ProgressDialog pd = new ProgressDialog(this);
pd.setTitle("提醒");
pd.setMessage("正在处理中。。。请稍后");
pd.show();
new Thread() {
public void run() {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
pd.dismiss();
};
}.start();
} /**
* 进度条对话框
*
* @param view
*/
public void click05(View view) {
final ProgressDialog pd = new ProgressDialog(this);
// 设置进度的样式
pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pd.setTitle("提醒");
pd.setMessage("正在处理中。。。请稍后");
pd.show();
new Thread() {
public void run() {
pd.setMax(100);
try {
for (int i = 0; i <= 100; i++) {
pd.setProgress(i);
Thread.sleep(500);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
pd.dismiss();
};
}.start();
} }
Android(java)学习笔记140:常用的对话框的更多相关文章
- 【原】Java学习笔记031 - 常用类
package cn.temptation; public class Sample01 { public static void main(String[] args) { /* * 类 Math: ...
- Java学习笔记七 常用API对象三
一.泛型:简单说就是对对象类型进行限定的技术 public class GenericDemo { public static void main(String[] args){ /*泛型作为1.5版 ...
- Java学习笔记六 常用API对象二
1.基本数据类型对象包装类:见下图 public class Test { public static void main(String[] args){ Demo(); toStringDemo() ...
- Java学习笔记五 常用API对象一
常用API:字符串操作:String类,StringBuffer类,StringBulider类 字符串是最重要的数据类型之一,处理字符串也是一种语言的基本工作. 1.String类: public ...
- Java学习笔记——字符串常用函数
class JavaTest4_String { public static void main(String[] args) { String str1 = "IOS,ANDROID,BB ...
- Java学习笔记之——常用类
Random,String,Math 1.Random Random() 创建一个新的随机数生成器 案例:产生3个5-10的随机数 运行结果 注意: 2.StingBuffer,StringBu ...
- Java学习笔记之——常用转义符号
\ 单独用会报错 \\ 打印右斜杠 \n 换行 \t Tab键 \" 双引号 \' 单引号
- Java学习笔记之——常用快捷键(eclipse)
* Ctrl+C 复制 * Ctrl+V 粘贴 * Ctrl+A 全选 * Ctrl+S 保存 * Ctrl+Z 撤销 * Ctrl+Y 还原 * Ctrl+X 剪切 * Ctrl+F 查找 * ...
- 《Java学习笔记(第8版)》学习指导
<Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...
- Java学习笔记4
Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...
随机推荐
- UVaLive 3971 Assemble (水题二分+贪心)
题意:你有b元钱,有n个配件,每个配件有各类,品质因子,价格,要每种买一个,让最差的品质因子尽量大. 析:很简单的一个二分题,二分品质因子即可,每次计算要花的钱的多少,每次尽量买便宜且大的品质因子. ...
- MyEclipse控制台console自动跳动的解决方案
有时候Eclipse启动,控制台console不会自动跳出来,需要手工点击该选项卡才行 按下面的设置,可以让它自动跳出来(或不跳出来): windows -> preferences ...
- E20180511-hm
thread n. 螺纹; 线; 线索; 线状物; vt. 穿成串; 将(针.线等)穿过…; 用…线缝; 给…装入(胶片.狭带.绳子); needle n. 针; 针状物; <口&g ...
- 洛谷P2568 GCD(莫比乌斯反演)
传送门 这题和p2257一样……不过是n和m相同而已…… 所以虽然正解是欧拉函数然而直接改改就行了所以懒得再码一遍了2333 不过这题卡空间,记得mu开short,vis开bool //minamot ...
- Kibana: Unknown error while connecting to Elasticsearch
如果访问不通,可能是网络代理的问题,注意查看/etc/profile中是否设置了相关的代理. 注意修改代理后,应该执行 . /etc/profile 使配置文件立即生效.
- 笔记-JavaWeb学习之旅12
会话技术 Cookie:客户端会话技术,将数据保存到客户端 package com.data.Cookie; import javax.servlet.ServletException; import ...
- ISCC 2018线上赛 writeup
今天有机会去ISCC2018参加了比赛,个人的感受是比赛题目整体难度不高,就是脑洞特别大,flag形式不明确,拿到flag后也要猜测flag格式,贼坑 废话不多说,以下是本人的解题思路 MISC 0x ...
- JTextArea设置滚动条
应将JTextArea置于JScrollPanel中 若要使只有垂直滚动条而没有水平滚动条,使用JTextArea.setLineWrap(true),自动换行. 以下摘自[url]http:// ...
- 关于gc日志中Desired Survivor的疑问和对象晋升老年代的小结
问题背景 (下面的所有内容都是根据书上的Serial/Serial Old收集器下的情况) 在<深入理解JVM>一书中的——3.6.3长期存活的对象将进入老年代的介绍中, 一个例子的jvm ...
- python学习之模块:
每个.py文件就是一个以文件名作为区别的模块,模块化编程便于维护.其它模块要调用某个模块的变量和函数就要用import 模块,然后通过模块.函数.模块.变量来引用. 为防止模块间变量和函数乃至模块名的 ...