18 对话框02

Android详细的对话框AlertDialog.Builder使用方法

我们在平时做开发的时候,免不了会用到各种各样的对话框,相信有过其他平台开发经验的朋友都会知道,大部分的平台都只提供了几个最简单的实现,如果我们想实现自己特定需求的对话框,大家可能首先会想到,通过继承等方式,重写我们自己的对话框。当然,这也是不失为一个不错的解决方式,但是一般的情况却是这样,我们重写的对话框,也许只在一个特定的地方会用到,为了这一次的使用,而去创建一个新类,往往有点杀鸡用牛刀的感觉,甚至会对我们的程序增加不必要的复杂性,对于这种情形的对话框有没有更优雅的解决方案呢? 
    幸运的是,android提供了这种问题的解决方案,刚开始接触android的时候,我在做一个自定义对话框的时候,也是通过继承的方式来实现,后来随着对文档了解的深入,发现了android起始已经提供了相应的接口Dialog
Builder
,下面我就吧相关的内容在这里分享一下,也能让更多的初学者少走弯路。

  首先是一个最简单的应用,就是弹出一个消息框,在android中可以这样实现

new
AlertDialog.Builder(self)
 .setTitle("标题") 
 
.setMessage("简单消息框")





  .setPositiveButton("确定", null)





  .show();

效果如下:

上面的代码中我们新建了一个AlertDialog,并用Builder方法形成了一个对象链,通过一系列的设置方法,构造出我们需要的对话框,然
后调用show方法显示出来,注意到Builder方法的参数 self,这个其实是Activity对象的引用,根据你所处的上下文来传入相应的引用就可以了。例如在onCreate方法中调用,只需传入this即
可。

下面是带确认和取消按钮的对话框:





  new AlertDialog.Builder(self) 





  .setTitle("确认")





  .setMessage("确定吗?")





  .setPositiveButton("是", null)





  .setNegativeButton("否", null)





  .show();

注意到,这里有两个null参数,这里要放的其实是这两个按钮点击的监听程序,由于我们这里不需要监听这些动作,所以传入null值简单忽略掉,但是实际开发的时候一般都是需要传入监听器的,用来响应用户的操作。
下面是一个可以输入文本的对话框:





  new AlertDialog.Builder(self)





  .setTitle("请输入")





  .setIcon(android.R.drawable.ic_dialog_info)





  .setView(new EditText(self))





  .setPositiveButton("确定", null)





  .setNegativeButton("取消", null)





  .show();

如上代码,我们用setView方法,为我们的对话框传入了一个文本编辑框,当然,你可以传入任何的视图对象,比如图片框,WebView等。。尽情发挥你的想象力吧~

下面是单选框与多选框,也是非常有用的两种对话框:





  new AlertDialog.Builder(self)





  .setTitle("请选择")





  .setIcon(android.R.drawable.ic_dialog_info)                





  .setSingleChoiceItems(new String[]
{
"选项1","选项2","选项3","选项4"}, 0





    new DialogInterface.OnClickListener()
{





                                





       public void onClick(DialogInterface
dialog,
 int which)
{





          dialog.dismiss();





       }





    }





  )





  .setNegativeButton("取消", null)





  .show();





1 new AlertDialog.Builder(self)





2 .setTitle("多选框")





3 .setMultiChoiceItems(new String[]
{
"选项1","选项2","选项3","选项4"}, null, null)





4 .setPositiveButton("确定", null)                





5 .setNegativeButton("取消", null)





6 .show();

单选和多选对话框应该是我们平时用的非常多的,代码应该很好理解,下面再最后介绍两个
列表对话框:





1 new AlertDialog.Builder(self)





2 .setTitle("列表框")





3 .setItems(new String[]
{
"列表项1","列表项2","列表项3"}, null)





4 .setNegativeButton("确定", null)





5 .show();

最后,在对话框中显示图片:





1 ImageView img
=
 new ImageView(self);





2 img.setImageResource(R.drawable.icon);





3   





4 new AlertDialog.Builder(self)





5 .setTitle("图片框")





6 .setView(img)





7 .setPositiveButton("确定", null)





8 .show();

18 对话框02,布布扣,bubuko.com

时间: 2024-12-26 13:21:15

18 对话框02的相关文章

18.对话框窗口

1.对话框分类 (1)模式对话框 当对话框显示时,会禁止本进程其他窗口的输入等用户交互操作 (2)无模式对话框 在对话框显示时,本进程其他窗口同样可以接受输入等用户交互操作 2.对话框基本使用 (1)对话框窗口处理函数 (2)注册窗口类(可选,基本不使用) (3)创建对话框 (4)关闭对话框

18.06.02 POJ4128:单词序列 15年程设期末06

描述 给出两个单词(开始单词和结束单词)以及一个词典.找出从开始单词转换到结束单词,所需要的最短转换序列.转换的规则如下: 1.每次只能改变一个字母 2.转换过程中出现的单词(除开始单词和结束单词)必须存在于词典中 例如: 开始单词为:hit 结束单词为:cog 词典为:[hot,dot,dog,lot,log,mot] 那么一种可能的最短变换是: hit -> hot -> dot -> dog -> cog, 所以返回的结果是序列的长度5: 注意: 1.如果不能找到这种变换,则

18.10.02 画作

题面 /* ------------------------------------ 画作 不难证明猜到一个这样的结论: 存在一种最优方案使得每次操作的区 域是上一次的子集且颜色与上一次相反. 考虑归纳证明, 记 S 为当前所有操作区域的并, T 为接下来一步的操作 区域, 我们有: 1. T 与 S 有交的情况一定可以转化成 T 被 S 包含的情况. 2. T 与 S 交集为空时, 可以找一个连接 S 和 T 的集合 M 并操作 S ∪ T ∪ M , 并将之前的所有操作连接到更外的层以及外层

android自定义对话框

2015-04-02 18:27:02 有的时候安卓内置的对话框不能满足我们的需要,或许是功能不齐全亦或者不符合我们的界面设计要求,这个时候我们就需要弄一个我们自己设置的对话框了,下面我将为大家讲一种很简单的方法创建自己的对话框. 首先创建一个style 即:<style name="你自己命名" parent="@android:Theme.Dialog">.......</style>这个相信大家都懂的. 接着创建你自己的对话框布局:自己

18.07.20(lambda().sorted().filter().map().递归.二分查找)

1.lambda() 匿名函数 lambda表示的是匿名函数,不需要用def来声明,一句话就可以声明一个函数 语法:函数名 = lambda 参数:返回值 注意: (1)参数可以有多个,多个参数用逗号隔开 (2)匿名函数不管多复杂.只写一行.且逻辑结束后直接返回数据 (3)返回值和正常函数一样1,可以是任意数据类型 我们通过__name__()查看函数名字 例: a = lambda x : x * xprint(a(5)) ==>25print(a.__name__) ==><lamb

PXE(preboot execution environment):【网络】预启动执行环节:引导 live光盘 ubuntu livecd 18.04+:成功

比较艰难的成功了. 艰难在于:吱吱吱吱(知知知知知):就是歌init启动参数而已! 最最艰难在于:这个nfs服务器软件有很大的关系.很多时候不是你不行,而是条件不具备 or 条件看似具备但其实有问题 default menu.c32 label ubuntu-18.04.2menu label ubuntu (version 18.04.02)kernel ub1804/casper/vmlinuzappend root=/dev/nfs netboot=nfs nfsroot=192.168.

Ubuntu 18.04 基于NVIDIA 2080安装TensorFlow-GPU 1.13.1

官方文档 注意版本一一对应https://tensorflow.google.cn/install/source 其他请参考 Ubuntu16.04 基于NVIDIA 1080Ti安装TensorFlow-GPU 安装环境 系统:Ubuntu 18.04.02 desktop 显卡:NVIDIA GeForce GTX 2080 显卡驱动:NVIDIA-Linux-x86_64-410.72.run CUDA:cuda_10.0.130_410.48_linux cuDNN: libcudnn7

flask 安装

flask官网 : http://docs.jinkan.org/docs/flask/installation.html (基本上就是按照官网思路一点一点来的) 1,安装easy_install: wget -q http://peak.telecommunity.com/dist/ez_setup.py python ez_setup.py 2,安装 virtualenv sudo easy_install virtualenv 3,因为报错,所以要升级Python至2.7 wget htt

实现基于SSL的FTPS

实现基于SSL的FTPS  目  录         1.查看当前vsftpd是否具有ssl模块         2.创建自签名证书         3.查看证书         4.配置vsftp支持ssl         5.测试.利用filezilla 登录测试         6.wireshark抓包结果 Vsfptd普通数据传输十分不安全,例如用户密码等很容易被窃取 1.查看当前vsftpd是否具有ssl模块 [[email protected] ~]# ldd $(which vs