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

Android使用Activity实现简单的可输入对话框 1、需求分析 众所周知,在应用中这样那样的评论总是少不了的,有的应用是在底部直接加一个EditText和一个Button,让用户输入文字或者表情之后点击按钮提交;而有的虽然也放置了EditText,但仅仅是一个“摆设”,并不具备输入功能,用户点击它后会弹出一个跳转到一个可以真正编辑的页面或者弹出一个可以输入内容的对话框。 比如下面这种效果: 这里的效果可以细分为四点: 点击底部的按钮之后会弹出对话框,对话框在布局的底部; 对话框中有输入框EditText,可以输入内容; 对话框弹出后EditText会自动获取焦点,弹出软键盘; 软键盘会把对话框顶上去,便于用户编辑。 一开始 立即下载
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



图2



图3



图4



图5



图6



图7

  图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();
【crawler笔记】R语言简单动态网页爬虫(rvest包)示例 1、爬虫目标 大家普遍认为Python的爬虫功能强大,但在解决动态加载或者登陆网站时,Python存在一定困难的,相对于一些普通爬虫,使用R语言会更方便。 以https://www.thepaper.cn/为例,爬取首页的新闻(标题、内容、时间),主要采用的是动态网页中常用的httr包。 初始学习时,参考了B站《20分钟入门基于R语言的网络爬虫_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili》的视频,但代码运行出现了报错,所以在原代码上做了修改。 2、代码分析及报错修改 library(rv 阅读详情

相关推荐

CrackerXI+脱壳实战:解决iOS应用逆向中的加密文件问题

本文详细介绍了如何使用CrackerXI+工具对iOS应用进行脱壳,解决App Store应用因FairPlay DRM加密而无法进行静态分析的难题。通过图形化界面一键操作,CrackerXI+能高效获取解密后的可执行文件,为逆向工程奠定基础。文章涵盖工具选型、实战步骤及常见问题排查,是iOS逆向入门与进阶的实用指南。

seed的博客 257

Android用户界面---对话框(dialogs)

对话框通常是一个显示在当前Activity之前的小窗口。它下面的Activity会失去焦点,并且对话框会接受所有的用户交互。对话框通常用于通知用户中断操作的,并且要执行与应用程序内进度直接相关的短期任务(如进度条或登录提示)。 Dialog类是创建对话框的基类。但你通常不应该直接实例化Dialog类,而应该使用以下之类。 AlertDialog 一个能够有一个、两个、三个或没有按钮的对话框,

FireOfStar的专栏 2970

Palantir Vertex:数字孪生模拟与决策系统深度指南

Palantir Vertex是Foundry系统中的核心数字孪生模块,本质上是一个决策模拟器而非简单的数据可视化工具。它基于本体层构建,通过对象关系网络模拟现实世界实体,填补数据模型与业务决策间的鸿沟。核心功能包括:创建隔离的沙盒场景进行假设测试、修改参数模拟不同干预方案、对比虚实数据发现异常,并最终将最优决策回传至业务系统。典型应用场景涵盖供应链韧性评估、资产维护优化和应急方案制定等,帮助用户在复杂环境中做出更优决策。

轩哥的个人研究和成长记录 891

常见的对话框Dialog

常见的对话框: 1.Toast 2.普通的对话框  3.列表对话框 4.单选对话框 5.多选对话框 6.自定义VIew对话框 7.进度条对话框(与进度相关的控件都可以到子线程更新UI) 8.是用了Adapter的对话框 xml代码: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

lxjhoney的博客 373

测试dali协议的软件,DALI2.0和DALI1.0完美兼容同一个模块,测试每项可过协议

DALI2.0和DALI1.0完美兼容同一个模块,测试每项可过协议深圳聚积智能 夏先生 13246760327 QQ 349098308■IEC62386-102(V2.0)通过测试内容IEC62386-102/2.1/Test preambleIEC62386-102/3.1/Polarity testIEC62386-102/3.2/Maximum and minimum system v...

weixin_35343788的博客 1349

Zemax操作33--5倍激光扩束器

5倍扩束

lzy750750的博客 2931

android几种对话框

我们在平时做开发的时候,免不了会用到各种各样的对话框,相信有过其他平台开发经验的朋友都会知道,大部分的平台都只提供了几个最简单的实现,如果我们想实现自己特定需求的对话框,大家可能首先会想到,通过继承等方式,重写我们自己的对话框。当然,这也是不失为一个不错的解决方式,但是一般的情况却是这样,我们重写的对话框,也许只在一个特定的地方会用到,为了这一次的使用,而去创建一个新类,往往有点杀鸡用牛刀的感觉,

追求技术的丸子 639

基因ID转换避坑指南:如何用org.Hs.eg.db把ENSEMBL ID变成可读的gene symbol

本文详细介绍了如何将RNA-seq等数据中常见的ENSEMBL ID转换为可读的基因符号(Gene Symbol),重点对比了biomaRt与org.Hs.eg.db两大工具的优劣,并深入剖析了多对多映射、版本号失效及非编码基因Symbol缺失三大核心陷阱。文章提供了针对TCGA、GEO等不同数据源的定制化处理方案与完整的稳健转换流程,帮助生物信息学分析者避免常见错误,确保下游分析的准确性。

weixin_28223453的博客 700

android 8种对话框(Dialog)使用方法汇总

作者:@gzdaijie 本文为作者原创,转载请注明出处:http://www.cnblogs.com/gzdaijie/p/5222191.html 目录 1.写在前面 2.代码示例 2.1 普通Dialog(图1与图2) 2.2 列表Dialog(图3) 2.3 单选Dialog(图4) 2.4 多选Dialog(图5) 2.5 等待Dialog(图6) 2.6 进度条

waiting alone的博客 1397

LPDDR5X内存技术解析:性能提升与优化策略

内存技术在现代计算系统中扮演着核心角色,其性能直接影响整体系统效率。LPDDR5X作为JEDEC最新标准,通过提升数据传输率至8533Mbps、优化能效比15%以上,并扩展突发长度至32字节,显著提升了移动设备的处理能力。这些改进特别适用于5G通信、AI加速(如昇腾芯片)及8K视频处理等高带宽需求场景。技术原理上,LPDDR5X引入了动态电压频率调整(DVFS)和可编程突发长度等创新机制,有效降低了实际应用中的延迟。在工程实践中,合理的PCB布局和信号完整性验证是确保高速稳定运行的关键。随着AI和8K应用的

weixin_29190169的博客 396

nRF开发环境搭建全攻略:VS Code + nRF Connect SDK + Zephyr实战

嵌入式开发中,环境配置往往是新手入门的第一道障碍,尤其面对基于Zephyr RTOS的Nordic nRF平台时,工具链的复杂度常让人望而却步。理解构建系统、SDK版本管理和调试工具之间的协作关系,是高效开发的前提。Zephyr作为开源实时操作系统,通过设备树和Kconfig实现硬件描述与功能配置,而nRF Connect SDK(NCS)则是Nordic基于Zephyr的增强发行版,两者结合为物联网开发提供了强大支持。基于VS Code搭建开发环境,配合west工具管理多仓库、CMake/Ninja执行构

weixin_29188997的博客 224

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

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

dizha5554的博客 112

STM32开发 -- 4G模块开发详解(1)

这部分一直再看,资料都已经整理好了,但是一直没有汇总。接下来就详细的看一下,GSM这部分是怎么实现的。

不积跬步,无以至千里 5万+

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

由于昨天没有发帖,所以今天弥补一下,跟大家分享一下好东西!在游戏中,如果没有过多特殊的要求,android系统自带的Dialog应该可以满足了,下面就是跟大家介绍各种类型的Dialog。如果这些都还不能满足你的需求的话,想在游戏做超炫,超酷的IU控件、对话框等等,就得你自己画了。~~~哈哈!Activities提供了一种方便管理的创建、保存、回复的对话框机制,例如 onCreateDialog(int), onPrepareDialog(int, Dialog), showDialog(int), dism

Potter:I am not for learning and learning, but for study and work 2026

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

上一篇: 主题:requestWindowFeature(featrueId),如何控制Android应用程序的窗体显示
下一篇: Android中级教程之Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)
轻鸿飘羽
博客等级 码龄16年 124粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值