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,一经查实,立即删除!

相关文章

HDU 5795

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

mac下beyond compare配置图

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

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…

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…

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

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

11g下如何查询trace文件名

eygle的书中有讲到查看数据库的内容&#xff0c;利用转储文件来查看 aler system dump datafile 3 block 9&#xff1b; roger提点说先oradebug setmypid&#xff0c;再dump&#xff0c;然后直接oradebug tracefile_name&#xff0c;就能够得到trace文件的完整路径了。 如图 转…

el-table表格格式化某一列数据;统一处理el-table表格某一列数据

以下代码可以直接复制使用 场景&#xff1a;table的原数据就是 姓名1234&#xff0c;但是现在想要改成统一的格式。可以使用formatter属性&#xff0c;它用于格式化指定列的值&#xff0c;接受一个Function&#xff0c;会传入两个参数&#xff1a;row和column&#xff0c;可以…

OpenWrt交换机手册(Switch Documentation)

如果你的设备含有不少于1个的LAN接口&#xff0c;那这个设备在不同的接口之间可能有一个被称为交换(switch)的特殊连接。大多数的内部构造如下图所示: 如果你想要更改这些端口如何互相连接的&#xff0c;你需要配置你的switch设备。 (see also network.interfaces) UCI config…

/deep/使用方式方式;/deep/无效; ::v-deep和>>>使用;

vue-loader官方文档的 /deep/ >>> ::v-deep 使用方法 场景&#xff1a;一般我们使用vue和element-ui&#xff0c;在修改第三方组件库的样式时候&#xff0c;会修改到页面不存在的html的标签样式&#xff0c;此时就需要使用深度作用选择器。 注意&#xff1a; 1.脚手…

ipsec NAT-T与穿透

拓扑&#xff1a; 一 NAT-T R1配置&#xff1a; R2配置&#xff1a; 默认开启NAT-T R3配置&#xff1a; 分析&#xff1a; 端口由UDP500变为UDP4500&#xff1b;隧道封装为&#xff1a;tunnel UDP-encaps。 二 穿透 R1配置&#xff1a; R2配置&#xff1a; R3配置&#xff1a; …

我的Mac os x中的nginx配置文件nginx.conf

环境: Mac os x 10.10.3 xcode6.3 在mac下用brew install nginx安装好了nginx&#xff0c;增加对php的支持&#xff0c;完整的nginx.conf文件内容如下: #user nobody; worker_processes 1;#error_log logs/error.log; #error_log logs/error.log notice; #error_log lo…

使用 Chrome Timeline 来优化页面性能

使用 Chrome Timeline 来优化页面性能有时候&#xff0c;我们就是会不由自主地写出一些低效的代码&#xff0c;严重影响页面运行的效率。或者我们接手的项目中&#xff0c;前人写出来的代码千奇百怪&#xff0c;比如为了一个 Canvas 特效需要同时绘制 600 个三角形&#xff0c;…

el-table点击某行高亮;el-table设置hover效果;监听el-table点击某行变色;去除el-table的hover效果;监听el-table的hover事件

以下代码可直接复制使用 无需任何修改 注意&#xff1a;如果最后的的css不生效&#xff0c;就单独的放在一个style标签内 重点解释&#xff1a; :row-class-name"tableRowClassName" //这个是设置返回某行的类名 :stripe"false" …

SQL Server replication requires the actual server name to make a connection to the server.错误解决...

今天&#xff0c;在作数据发库时&#xff0c;出现如下错误&#xff1a; "SQL Server replication requires the actual server name to make a connection to the server. Connections through a server alias, IP address, or any other alternate name are not supporte…

el-table使用fixed后,最后一行显示不全;el-table设置fixed后,最后一行被遮挡。

解决代码&#xff1a; .el-table {/deep/ .el-table__body-wrapper {overflow-x: scroll !important;//直接设置横轴内容滚动条 即可撑高高度 还不影响使用} }一、情景&#xff1a;给element的el-table设置fixed固定后&#xff0c;最后一行显示部分被遮挡。有的说是有时出现这…

修改el-table滚动条样式

.el-table {// 滚动条的宽度/deep/ .el-table__body-wrapper::-webkit-scrollbar {width: 10px; // 横向滚动条height: 10px; // 纵向滚动条 必写}// 滚动条的滑块/deep/ .el-table__body-wrapper::-webkit-scrollbar-thumb {background-color: #1fff;//颜色border-radius: 5px…

Mac OS 如何更改文件的默认打开方式

From: http://www.ipc.me/os-x-xiao-ji-qiao.html 和使用 Windows PC 一样&#xff0c;人们在 Mac 电脑中往往也需要用多种应用开启同一种文件。并且&#xff0c;由于环境、习惯以及个人喜好不同&#xff0c;用户常常会希望更改某种文件的默认打开方式…… 在 OS X 系统下&a…

el-table列宽自适应;el-table表格的列根据内容自动撑满;el-table内容换行问题;

原文链接 重点就一个方法 :width"flexColumnWidth(‘date’,tableData)" 第一个参数是这个列的字段 第二个参数是这个表格的数据 只需要给对应的列 el-table-column 标签加上此方法 即可做到此列自适应 其他的列想要自适应宽度 同样使用 :width 方法即可 此段代码可…