Android Dialog 的一些特性
1. Dialog 与 AlertDialog 的区别。
AlertDialog 是一种特殊形式的 Dialog。这个类中,我们可以添加一个,两个或者三个按钮,可以设置标题。所以,当我们想使用 AlertDialog 默认的按钮形式,用 AlertDialog 更加方便,而且有一个类 AlertDialog.Builder 很方便创建一个 AlertDialog。
2. Dialog 与 AlertDialog 写代码时需注意的事项。
我们可以给一个 Dialog 用自定义的 Layout。有两个位置可以设置 Layout。
- 一个是结构体中
- 一个是 onCreate 方法中
如果使用 AlertDialog,在结构体中需要写
View contentView = LayoutInflater.from(context).inflate(R.layout.cutomized_dialog, null);
setView(contentView);
而不能直接写 setContentView(R.layout...); 这会导致错误:E/AndroidRuntime(4544): android.util.AndroidRuntimeException: requestFeature() must be called before adding content
在 onCreate 里写的话,可以直接用 setContentView(R.layout...); 而不会导致错误。但是,这两种方法是有区别的!
如果写在结构体里,用的是 LayoutInflater,而真正的外壳依然是默认的 Dialog 的一个外壳。也就是有 Dialog 默认的标题,默认的背景颜色等。
但如果写在 onCreate 里,使用 setContentView(R.layout...); 这种情形下,Dialog 默认的 Layout 外壳就不存在了,而使用我们自定义的 Layout。比如你的 Layout 的背景颜色是透明,那么出来的 Dialog 的背景就是透明的。而写在结构体里的情况则背景色是系统 Dialog 默认的(黑或白一般)。而且这种方法下不可以再使用系统默认的标题栏了,因为它已经不存在了。所以如果你写上:
TextView titleText = (TextView) findViewById(android.R.id.title);
titleText.setText("testtitle");
你会得到一个 NullPointer 。因为 android.R.id.title 这个 Layout 已经被覆盖。
如果使用 Dialog,在结构体里,可以直接写 setContentView(R.layout.cutomized_dialog); 而不用 LayoutInflater。
在 onCreate 里的话,也是一样,直接写 setContentView(R.layout.cutomized_dialog);
也就是说,如果用的是 Dialog,两种方法写没有任何区别。都会使用默认的 Dialog 样式。如果想修改样式,则需给 Dialog 提供自定义的样式。
我曾经需要创建一个背景透明的 Dialog,可是不管我怎么改 style,都没有成功。最后解决方案是使用了 AlertDialog 然后在 onCreate 方法中使用自己的 Layout,并把它的背景设置为透明。
Dialog 透明效果成功。解决方案是给 Dialog 的背景设置为一个透明的图片。(有一篇文章可供参考,http://blog.csdn.net/sodino/article/details/5822147)
<item name="android:windowBackground">@drawable/a_transparent_image</item>
详情看下面的 xml 文件。
3. 一些参数
getWindow().setDimAmount(0);
这个函数用来设置 Dialog 周围的颜色。系统默认的是半透明的灰色。值设为0则为完全透明。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="dialog" parent="@android:style/Theme.Dialog">
<!--边框-->
<item name="android:windowFrame">@null</item>
<!--是否浮现在activity之上-->
<item name="android:windowIsFloating">true</item>
<!--半透明-->
<item name="android:windowIsTranslucent">false</item>
<!--无标题-->
<item name="android:windowNoTitle">true</item>
<!--背景透明这种方法不好使-->
<item name="android:windowBackground">@color/transparent</item>
<!--背景透明正确方法-->
<item name="android:windowBackground">@drawable/a_transparent_image</item>
<!--模糊-->
<item name="android:backgroundDimEnabled">false</item>
</style>
</resources><item name="android:windowBackground">@color/transparent</item>
Android Dialog 的一些特性的更多相关文章
- Android 5.X新特性之为RecyclerView添加下拉刷新和上拉加载及SwipeRefreshLayout实现原理
RecyclerView已经写过两篇文章了,分别是Android 5.X新特性之RecyclerView基本解析及无限复用 和 Android 5.X新特性之为RecyclerView添加Header ...
- Android 5.X新特性之为RecyclerView添加HeaderView和FooterView
上一节我们讲到了 Android 5.X新特性之RecyclerView基本解析及无限复用 相信大家也应该熟悉了RecyclerView的基本使用,这一节我们来学习下,为RecyclerView添加H ...
- Android Dialog使用举例
在Android开发中,我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择.这些功能我们叫它Android Dialog对话框,在我们使用Android的过程中,我归纳了一 ...
- 《Android群英传》读书笔记 (5) 第十一章 搭建云端服务器 + 第十二章 Android 5.X新特性详解 + 第十三章 Android实例提高
第十一章 搭建云端服务器 该章主要介绍了移动后端服务的概念以及Bmob的使用,比较简单,所以略过不总结. 第十三章 Android实例提高 该章主要介绍了拼图游戏和2048的小项目实例,主要是代码,所 ...
- Android 6.0 新特性 整理 资料来自网络
Android 6.0新特性 Runtime Permissions Doze and App Standby Apache HTTP Client Removal BoringSSL Access ...
- 腾讯云安全:开发者必看|Android 8.0 新特性及开发指南
欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 背景介绍 谷歌2017 I/O开发者大会今年将于5月17-19日在美国加州举办.大会将跟往年一样发布最新的 A ...
- Android 8.0 新特性
Android 8.0 (Android Oreo(奥利奥))新特性介绍 通知渠道 - Notification Channels 通知渠道是由应用自行定义的通知内容类别,借助渠道,开发者可以让用户对 ...
- 开发者必看|Android 8.0 新特性及开发指南
背景介绍 谷歌2017 I/O开发者大会今年将于5月17-19日在美国加州举办.大会将跟往年一样发布最新的 Android 系统,今年为 Android 8.0.谷歌在今年3 月21日发布 Andro ...
- android 7.0 新特性 和对开发者的影响
android 7.0新特性 - jiabailong的专栏 - 博客频道 - CSDN.NEThttp://blog.csdn.net/jiabailong/article/details/5241 ...
随机推荐
- 好记性不如烂笔头-linux学习笔记6keepalived实现主备操作
Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工 ...
- Pthreads 环境配置,VisualStudio
▶ Visual Studio 下配置MPI环境 ● 下载 Pthreads(http://pthreads.org/),解压. ● 针对 x64 程序的配置 ■ 将 Pre-built.2\incl ...
- centos7上mysql无法启动也没有日志
报错的原因就是 [root@localhost duanxinli]# journalctl -xe-- Subject: Unit mysqld.service has begun start-up ...
- 跟我学算法 - 读取excel文件(xlrd)
import xlrd import numpy as np # fname 表示文件名 fname = '1白.xlsx'# 打开文件 bk = xlrd.open_workbook(fname)# ...
- UNITY 打APK是如何确定哪些资源有用哪些无用的
一切从build settings开始,它即是 构建列表,构建运行包当然从它开始. 1,只有在构建列表中的场景和场景引用资源才会被打进包里,其它资源除了2,3位置都不会被打包 2,streamming ...
- rook issues
ceph-volumeattacher: failed rbd single_major check, assuming it's unsupported: failed to check for r ...
- ThreadLocal<T> 类
using System; using System.Threading; using System.Threading.Tasks; class ThreadLocalDemo { // Demon ...
- Redis服务器操作
[Redis服务器操作] 1.TIME 返回当前服务器时间. 2.DBSIZE 返回当前数据库的 key 的数量. 3.LASTSAVE 返回最近一次 Redis 成功将数据保存到磁盘上的时间,以 U ...
- 模m的剩余类里的一切数与m的最大公约数相等
[模m的剩余类里的一切数与m的最大公约数相等] 设剩余类里的任意两元素,a.b.则: a=mq1+r1, b= mq2+r1. 根据上式可得,(a,m)=(m,r1), (b,m)=(m,r2).可推 ...
- push和pop指令的使用