使用自定义视图的AlertDialog主要分为以下几个步骤:

1)利用XML文件构建自己的的视图

2)将视图添加到AlertDialog中

* 在进行第二步之前,有时需要对对话框窗口进行额外的设置

下面分步骤叙述:

1)写XML文件

后四个参数的作用就是用来显式的声明从view代表的内容区域空间向上下左右再延伸出多少空间,延伸出去的空间也是内容区域的一部分,因为没有视图覆盖就露出了低下背景色黑色,所以这里只要显式的设定这四个方向的延伸区域均为0即可

  1. setView(view,0,0,0,0)

作为内容区域的一部分,通过view的findViewById,可以获得视图中各个子视图的引用,进而设置内容或者监听器。利用setView方法将对话框的内容区域设置好后,就可以调用show方法来显示拥有自定义内容区域的对话框了。

setView方法是AlertDialog的自有方法,而setContentView方法是AlertDialog继承自Dialog的方法。setContentView方法会将膨胀后的视图作为整个装载对话框的Window的视图。所以,尽管使用setView和setContentView表面上看起来差不多,但是实际上层次不一样。因为setContentView(view)是将view放到window上,所以必须得先有window对象才可以,而window对象是在AlertDialog调用了show方法之后才会有的。所以setContentView方法必须在show方法调用之后才可以调用,否则会产生异常。setContentView将参数view对象添加到window上,进而通过window的findViewById方法来获得view中的各个子视图的引用,进而设置内容或者监听器。

其它一些常用参数设置:

弹出对话框后,如果希望对话框意外的区域颜色变暗,可以做如下设置:

  1. dialog.show();
  2. Window window = dialog.getWindow();
  3. window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
  4. WindowManager.LayoutParams params =thisDialog.getWindow().getAttributes();
  5. params.dimAmount = 0.8f;
  6. window.setAttributes(params);

dimAmount是设置对话框意外的区域能见度的,取值范围是0.0f~1.0f,0.0f是全透明,也就是说对话框下面覆盖区域以外的内容是可以看的清清楚楚的,1.0f就是一点也看不见,漆黑一片。但是让dimAmount设置起作用,必须为window加上FLAG_DIM_BEHIND旗标才可以,否则设置无效。

点击对话框以外的区域,对话框不消失:

这个是调用dialog对象本身的一个方法:dialog.setCanceledOnTouchOutside(false);

当将需要的设置都设置完毕后,就可以调用setContentView(view)来添加view到窗口中。然后利用window.findViewById来获取view中定义的子视图,并设置内容或者监听器。

最后,利用dialog来调用setContentView和使用window来调用setContentView效果是一样的,因为Dialog的setContentView方法内部就是使用它持有的window对象的setContentView方法来添加view的:

  1. public void setContentView(int layoutResID){
  2. mWindow.setContentView(layoutResID);
  3. }

mWindow是Dialog的一个Window类型的属性,用来引用对话框的窗口对象

https://blog.csdn.net/piglite/article/details/50453397

当使用setContentView的时候,如果不指定任何额外的参数,那么会对话框会按照xml文件的原样来进行显示。只不过作为对话框的window不可能占据全屏,所以尽管xml文件描述的view不会占满屏幕,而是占满作为对话框的window。所以,如果想调整对话框的大小,就需要设置一下对话框窗口(window)的宽高尺寸:

使用自定义视图的AlertDialog的更多相关文章

  1. 《连载 | 物联网框架ServerSuperIO教程》- 13.自定义视图显示接口开发,满足不同的显示需求

    1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...

  2. Android中的自定义视图控件

    简介 当现有控件不能满足需求时,就需要自定义控件. 自定义控件属性 自定义控件首先要继承自View,重写两个构造函数. 第一个是代码中使用的: public MyRect(Context contex ...

  3. 自定义视图引擎,实现MVC主题快速切换

    一个网站的主题包括布局,色调,内容展示等,每种主题在某些方面应该或多或少不一样的,否则就不能称之为不同的主题了.每一个网站至少都有一个主题,我这里称之为默认主题,也就是我们平常开发设计网站时的一个固定 ...

  4. SpringMVC自定义视图 Excel视图和PDF视图

    一.自定义视图-Excel视图 1.Maven依赖 引入POI <dependency> <groupId>org.apache.poi</groupId> < ...

  5. MVC自定义视图规则

    自定义规则: using System.Web.Mvc; using System.Configuration; namespace Research { public class ViewConfi ...

  6. (翻译)为你的MVC应用程序创建自定义视图引擎

    Creating your own MVC View Engine For MVC Application 原文链接:http://www.codeproject.com/Articles/29429 ...

  7. iOS-xib(使用XIB实现嵌套自定义视图)

    参考:http://wtlucky.github.io/geekerprobe/blog/2014/08/10/nested-xib-views/?utm_source=tuicool 因为主要练习x ...

  8. 自定义视图一:扩展现有的视图,添加新的XML属性

    这个系列是老外写的,干货!翻译出来一起学习.如有不妥,不吝赐教! 简介 这个系列详细的介绍了如何穿件Android自定义视图.主要涉及的内容有如何绘制内容,layout和measure的原理,如何继承 ...

  9. 一个基于MBProgressHUD的自定义视图hud例子

    项目中用到的一个hud,基于MBProgressHUD,使用自定义视图实现的,动画效果是从网上参考的,并不是很理想.有需要的可以看看,这里是源码(源码用了cocoapods,运行前需要pod inst ...

随机推荐

  1. CentOS开放端口号

    #vi /etc/sysconfig/iptables 在打开的文件中增加一份端口配置信息: A INPUT -p tcp -m state --state NEW -m tcp --dport 81 ...

  2. gradle 打包 jar (一波三折)

    第一次尝试,打包成功,运行失败 build.gradle 打包 jar { baseName 'testJar' from { //添加依懒到打包文件 //configurations.compile ...

  3. (转)mysql主从切换步骤

    原文:http://6226001001.blog.51cto.com/9243584/1723273 1> 正常切换 1)从服务器检查SHOW PROCESSLIST语句的输出,直到你看到Ha ...

  4. javascript中childNodes与children的区别

    1.childNodes:获取节点,不同浏览器表现不同: IE:只获取元素节点: 非IE:获取元素节点与文本节点: 解决方案:if(childNode.nodeName=="#text&qu ...

  5. 创建自己的区块链游戏SLOT——以太坊代币(三)

    一个以太坊合约版本的轮盘游戏,向合约转账ETH,有几率获得3,5,10,100倍奖励 合约地址:0x53DA598E70a1505Ad95cBF17fc5DCA0d2c51174b 捐赠ETH地址:0 ...

  6. 草稿-把vim变成IDE

    从昨天下午到现在一直在研究vim,初学者,从vim最基本的命令开始看起的.是通过vimtutor学习的. 看到最后一章的时候,发现原来vimtutor中的知识知识vim中的冰山一角,vim真正的强大之 ...

  7. Calendar介绍

    java.util.Calendar是一个抽象类,它定义了日历相关的一系列操作,使用java.util.Calendar除了可以表示日期和时间,还可以用它来对时期或时间进行算术运算,比如获取当前日期1 ...

  8. [作业] Python入门基础--用户登陆

    让用户输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定登陆 #__author:Mifen #date: 2018/11/28 import time #自定义本地用户名和密码 user_nam ...

  9. CUBA-Platform将全面助力中国开发者

    关注CUBA的伙伴们,你们好! 今天我们有新的进展告诉大家. 九月十五日到十六日CUBA平台事业部负责人(同时也是Haulmont公司合伙人)专程来到中国与CUBA中国团队进行了两天时间的交流.讨论. ...

  10. 单独烧录kernel

    使用fastboot: adb reboot bootloader //adb 进入BootLoader(fastboot是BootLoader的命令) fastboot flash boot boo ...