Android 对话框(Dialog)大全 建立你自己的对话框

Activities提供了一种方便管理的创建、保存、回复的对话框机制,例如 onCreateDialog(int), onPrepareDialog(int, Dialog), showDialog(int), dismissDialog(int)等方法,如果使用这些方法的话,Activity将通过getOwnerActivity()方法返回该Activity管理的对话框(dialog).

  onCreateDialog(int):当你使用这个回调函数时,Android系统会有效的设置这个Activity为每个对话框的所有者,从而自动管理每个对话框的状态并挂靠到Activity上。这样,每个对话框继承这个Activity的特定属性。比如,当一个对话框打开时,菜单键显示为这个Activity定义的选项菜单,音量键修改Activity使用的音频流。

  showDialog(int): 当你想要显示一个对话框时,调用showDialog(int id) 方法并传递一个唯一标识这个对话框的整数。当对话框第一次被请求时,Android从你的Activity中调用onCreateDialog(int id),你应该在这里初始化这个对话框Dialog。这个回调方法被传以和showDialog(int id)相同的ID。当你创建这个对话框后,在Activity的最后返回这个对象。

  onPrepareDialog(int, Dialog):在对话框被显示之前,Android还调用了可选的回调函数onPrepareDialog(int id, Dialog). 如果你想在每一次对话框被打开时改变它的任何属性,你可以定义这个方法。这个方法在每次打开对话框时被调用,而onCreateDialog(int) 仅在对话框第一次打开时被调用。如果你不定义onPrepareDialog(),那么这个对话框将保持和上次打开时一样。这个方法也被传递以对话框的ID,和在onCreateDialog()中创建的对话框对象。

  dismissDialog(int):当你准备关闭对话框时,你可以通过对这个对话框调用dismiss()来消除它。如果需要,你还可以从这个Activity中调用dismissDialog(int id) 方法,这实际上将为你对这个对话框调用dismiss() 方法。 如果你想使用onCreateDialog(int id) 方法来管理你对话框的状态(就如同在前面的章节讨论的那样),然后每次你的对话框消除的时候,这个对话框对象的状态将由该Activity保留。如果你决定不再需要这个对象或者清除该状态是重要的,那么你应该调用removeDialog(int id)。这将删除任何内部对象引用而且如果这个对话框正在显示,它将被消除。

下面是几种对话框的效果


图1效果:该效果是当按返回按钮时弹出一个提示,来确保无误操作,采用常见的对话框样式。

创建对话框方法dialog()

protected void dialog() {
AlertDialog.Builder builder = new Builder(Main.this);
builder.setMessage("确认退出吗?");
builder.setTitle("提示");
builder.setPositiveButton("确认", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
Main.this.finish();
}
});
builder.setNegativeButton("取消", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.create().show();
}

在onKeyDown(int keyCode, KeyEvent event)方法中调用此方法

public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
dialog();
}
return false;
}

————————————————————————————————————————


图2效果:改变了对话框的图表,添加了三个按钮


Dialog dialog = new AlertDialog.Builder(this)

.setIcon(android.R.drawable.btn_star)

.setTitle("喜好调查")

.setMessage("你喜欢李连杰的电影吗?")

.setPositiveButton("很喜欢",new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Toast.makeText(Main.this, "我很喜欢他的电影。",
Toast.LENGTH_LONG).show();
}
})

.setNegativeButton("不喜欢", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Toast.makeText(Main.this, "我不喜欢他的电影。", Toast.LENGTH_LONG)
.show();
}
})

.setNeutralButton("一般", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Toast.makeText(Main.this, "谈不上喜欢不喜欢。", Toast.LENGTH_LONG)
.show();
}
}).create();

dialog.show();

————————————————————————————————————————


图3效果:信息内容是一个简单的View类型


new AlertDialog.Builder(this)

.setTitle("请输入")

.setIcon(android.R.drawable.ic_dialog_info)

.setView(new EditText(this))

.setPositiveButton("确定", null)
.setNegativeButton("取消", null).show();

————————————————————————————————————————

图4效果:信息内容是一组单选框

new AlertDialog.Builder(this)

.setTitle("复选框")

.setMultiChoiceItems(new String[] { "Item1", "Item2" }, null, null)

.setPositiveButton("确定", null)
.setNegativeButton("取消", null).show();


————————————————————————————————————————

图5效果:信息内容是一组多选框

new AlertDialog.Builder(this)

.setTitle("单选框")

.setIcon(android.R.drawable.ic_dialog_info)

.setSingleChoiceItems(new String[] { "Item1", "Item2" }, 0, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})

.setNegativeButton("取消", null)

.show();


————————————————————————————————————————

图6效果:信息内容是一组简单列表项

new AlertDialog.Builder(this)

.setTitle("列表框")

.setItems(new String[] { "Item1", "Item2" }, null)

.setNegativeButton("确定", null)

.show();

————————————————————————————————————————

图7效果:信息内容是一个自定义的布局

1.布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content" android:layout_width="wrap_content"
android:background="#ffffffff" android:orientation="horizontal"
android:id="@+id/dialog">
<TextView android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:id="@+id/tvname" android:text="姓名:" />
<EditText android:layout_height="wrap_content"
android:layout_width="wrap_content" android:id="@+id/etname" android:minWidth="100dip"/>

</LinearLayout>

2.调用代码

LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.dialog,
(ViewGroup) findViewById(R.id.dialog));

new AlertDialog.Builder(this)

.setTitle("自定义布局")

.setView(layout)
.setPositiveButton("确定", null)
.setNegativeButton("取消", null)

.show();

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/403350.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SAP使用表空间传输异构系统迁移

SAP使用表空间传输异构系统迁移 此文档乃原创总结&#xff0c;仅适用于oracle数据库。此方法特点&#xff0c;速度快、停机时间短&#xff0c;配合RMAN使用甚至可以做到不停机、在线迁移并可以支持裸设备和ASM。以次方法做迁移&#xff0c;在实际测试中&#xff0c;从Solaris s…

在MAC下安装Exuberant ctags

From: http://blog.csdn.net/dragon1225/article/details/7021064 最简单的方式就是在终端执行&#xff1a;brew install ctags MAC自带的ctags文件只支持几种语言, 因为最近需要开发android程序, 使用到java语言, 所以下个Exuberant Ctags安装上~ 从http://ctags.sourceforge…

Eclipse: select at least one project

在Eclipse导入工程的时候如果遇到这种错误&#xff0c;一般是由于当前导入操作的工程名与Eclipse中已经导入的工程名重复所致。此时需要打开当前工程列表&#xff0c;删除重名目录即可&#xff1a;    PS: Window -> Show View -> Project Explorer 打开工程列表。

HDU 5795

题意&#xff1a; 两人轮流从 n 堆 糖果里取糖果&#xff0c;每次可以1&#xff09; 选择一堆取任意个&#xff08;不为 0&#xff09;2) 选择一堆糖果分成 3 堆&#xff08;每堆数量 > 1)拿到最后一颗糖果的人赢。 解题 &#xff1a; 打表算出一些 sg 值&#xff0c;就可以…

IOS UIPageController

- (void)viewDidLoad{[super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.//定义UIScrollView//self.scrollView [[UIScrollView alloc] init];//self.scrollView.frame CGRectMake(10, 0, 200, 500);self.scrollView.contentSiz…

mac下beyond compare配置图

配置Tab键为4个空格&#xff1a; 显示行号&#xff1a;

子网寻址

一、概念   将IP地址中的主机号再分成一个子网号和主机号。而不是把IP地址看成单纯的网络号主机号。举例来说&#xff1a;一个B类网络地址&#xff0c;网络位为16位&#xff0c;主机位为16位。若划分子网则需要对这16主机位继续进行划分&#xff0c;比如在这16bit中将8bit用…

Win7下安装linux虚拟机

关于如何在Win7下搭建linux学习环境&#xff0c;特在此分享下. 一、工具 1、VMware-workstation-full-9.0.0-812388.exe 下载地址:http://pan.baidu.com/s/1bpFT0ZX 2、32位的CenOS系统镜像文件CentOS-6.7-i386-bin-DVD1.iso. 下载地址:http://pan.baidu.com/s/1cHrxLG…

el-table处理某一行样式;el-table表格row-class-name无效原因;el-table格式化某行样式和数据

如果是设置点击el-table某行变色或者hover 点击看这篇 情景&#xff1a;:row-class-name“tableRowClassName” 无效果 原因是&#xff1a;el-table的属性里 多了个stripe&#xff0c;stripe属性可以创建带斑马纹的表格。会影响到row-class-name的渲染。去掉stripe即可。 &l…

国内ios分亨组件,

2019独角兽企业重金招聘Python工程师标准>>> 1. 新浪微博 (支持新浪微博官方 SSO OAuth 及 iOS 6 特性&#xff09; 2. 微信&#xff08;仅支持分享到朋友&#xff09; 3. 网易微博 4. 腾讯微博 5. 豆瓣 6. 人人网 https://github.com/icyl…

子网掩码

子网掩码用于确定网络地址中子网号的位数&#xff08;也即比特数&#xff09;及主机号位数。掩码是一个32bit的值&#xff0c;其中值为1的比特留给网络号和子网号&#xff0c;为0的比特留给主机号。譬如一个B类地址&#xff0c;子网掩码可以设置为&#xff1a;   <1> …

让linux的SSH客户端也能记住服务器的密码

From: http://blog.chinaunix.net/uid-17240700-id-2813900.html CU上一位网友的问题如下: 以前一直用windows&#xff0c;最近工作原因换Ubuntu了&#xff0c;但是windows下的SSH客户端(我用的是Netsarang公司的 Xshell,Xftp,Xmanager)&#xff0c;linux没有相应版本…

el-table文字超出隐藏;el-table表格文字一行展示,超出隐藏,多余的内容会在 hover时显示 ;

el-table文字默认情况下若内容过多会折行显示&#xff0c;若需要单行显示可以给el-table-column使用show-overflow-tooltip属性&#xff0c;它接受一个Boolean&#xff0c;为true时多余的内容会在 hover 时以 tooltip 的形式显示出来。 给el-table-column添加show-overflow-t…

webdriverAPI-Java

1.1 下载selenium2.0的lib包 http://code.google.com/p/selenium/downloads/list 官方UserGuide&#xff1a;http://seleniumhq.org/docs/ 1.2 用webdriver打开一个浏览器 我们常用的浏览器有firefox和IE两种&#xff0c;firefox是selenium支持得比较成熟的浏览器。但是做页…

USB设备多个配置描述符的获取过程

多配置USB设备枚举过程和多字符串描述符的枚举是相同的&#xff0c;过程如下&#xff1a; 1. 总线复位&#xff1b; 2. 获取设备描述符&#xff1b; 3. 总线复位&#xff1b; 4. 设置地址&#xff1b; 5. 获取设备描述符&#xff1b; 6. 获取配置描述符1&#xff1b; 7.…

腾讯的大饼 微信的价值

今天&#xff0c;微信火了。在被新浪微博压制近两年之后腾讯终于又成功推出一款时代级产品——微信。微信的发展初衷是一款移动社交工具&#xff0c;但随着微信用户步入2亿大关之后&#xff0c;微信对于腾讯的意义已经不仅仅是移动社交工具&#xff0c;微信肩负着对抗阿里、新浪…

ssh自动输入密码登录服务器/ssh免输入密码登录/非交互ssh 密码验证

From: http://www.linuxidc.com/Linux/2011-02/31921.htm 由于经常需要登录一些远程的服务器&#xff0c;每次都需要将密码重输一遍&#xff0c;如下&#xff1a; #ssh 用户名我的服务器的ip 用户名我的服务器的ips password: &#xff08;这里需要手动输入密码后回车&#x…

Access、Hybrid和Trunk三种模式的理解

以太网端口的三种链路类型&#xff1a;Access、Hybrid和Trunk&#xff1a; <1> Access类型的端口只能属于1个VLAN&#xff0c;一般用于连接计算机的端口&#xff1b; <2> Trunk类型的端口可以允许多个VLAN通过&#xff0c;可以接收和发送多个VLAN的报文&#xff…

yum install nginx

From: http://www.cnblogs.com/ShepherdIsland/p/yum_install_nginx.html 先安装nginx的yum源 http://nginx.org/en/linux_packages.html#stable 找到链接&#xff0c;安装&#xff1a; rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.e…