关于dialog的一些
来源:互联网 发布:html宣传源码 编辑:程序博客网 时间:2024/06/10 22:47
1.Theme主题中设置了背景的默认阴暗度
所以dialog有0.6的阴暗度。
<item name="backgroundDimAmount">0.6</item>但是没有设置如下属性
item name="android:backgroundDimEnabled">true</item>
所以系统在setContentView后首先会遍历主题的属性,默认的主题没有该属性
if (a.getBoolean(com.android.internal.R.styleable.Window_backgroundDimEnabled, mIsFloating)) { /* All dialogs should have the window dimmed */ if ((getForcedWindowFlags()&WindowManager.LayoutParams.FLAG_DIM_BEHIND) == 0) { params.flags |= WindowManager.LayoutParams.FLAG_DIM_BEHIND; } if (!haveDimAmount()) { params.dimAmount = a.getFloat( android.R.styleable.Window_backgroundDimAmount, 0.5f); } }如果没有设置Window_backgroundDimEnabled属性就使用mIsFloating的值,而默认Theme主题中默认没有设置属性,所以mIsFloating为false,
mIsFloating = a.getBoolean(com.android.internal.R.styleable.Window_windowIsFloating, false); int flagsToUpdate = (FLAG_LAYOUT_IN_SCREEN|FLAG_LAYOUT_INSET_DECOR) & (~getForcedWindowFlags()); if (mIsFloating) { setLayout(WRAP_CONTENT, WRAP_CONTENT); setFlags(0, flagsToUpdate); } else { setFlags(FLAG_LAYOUT_IN_SCREEN|FLAG_LAYOUT_INSET_DECOR, flagsToUpdate); }所以,Window_backgroundDimEnabled就会使用mIsFloating的false,所以如下代码将不会进去:
if (a.getBoolean(com.android.internal.R.styleable.Window_backgroundDimEnabled, mIsFloating)) { /* All dialogs should have the window dimmed */ if ((getForcedWindowFlags()&WindowManager.LayoutParams.FLAG_DIM_BEHIND) == 0) { params.flags |= WindowManager.LayoutParams.FLAG_DIM_BEHIND; } if (!haveDimAmount()) { params.dimAmount = a.getFloat( android.R.styleable.Window_backgroundDimAmount, 0.5f); } }就设置不了 params.dimAmount。所以activity设置了Theme主题是不会显示阴暗度的,而dialog设置了Theme.Dialog主题后是有阴暗度的,如下
<style name="Theme.Dialog"> <item name="windowFrame">@null</item> <item name="windowTitleStyle">@style/DialogWindowTitle</item> <item name="windowBackground">@drawable/panel_background</item> <item name="windowIsFloating">true</item>
所以dialog有0.6的阴暗度。
2.Dialog的window属性
window属性宽高都设置match后,外面就不能点击了,因为外面已经没有点击区域了,且不能在外面控制布局里控件的位置,需要在布局里就控制好位置
window属性宽高都设置wrap后,即使layout的跟布局是match,且里面的控件是match,运行后控件显示出来都是和wrap的效果是一样的,dialog的内容只有wrap大小,一定要自己设置里面控件的固定大小(比如固定的200dp),并且这种情况下,外面如果有空余的位置,是可以设置点击使dialog消失的
<item name="android:windowBackground">@color/red_normal</item>这个设置的是dialog的DecorView的背景,是真正意义上的根布局
<item name="android:backgroundDimEnabled">true</item> <item name="android:backgroundDimAmount">0.7</item>
<item name="windowIsFloating">true</item>以上两种都是设置DecorView后面的阴暗度,层次在DecorView下面。
3.一般情况下使用以下两种style就可以满足需求
<!-- 使用默认的黑暗程度0.6 --> <style name="dialog" parent="@android:style/Theme.Dialog"> <item name="android:windowNoTitle">true</item> <!-- 无标题,设置的是decorview的背景色 --> <item name="android:windowBackground">@android:color/transparent</item> </style> <!-- 可以自己调整阴影度 --> <style name="dim_dialog" parent="@android:style/Theme.Dialog"> <item name="android:windowNoTitle">true</item> <!-- 无标题 --> <item name="android:windowBackground">@android:color/transparent</item> <!-- 默认是有阴影背景的,加以下属性可以改变阴影度阴影 --> <item name="android:backgroundDimEnabled">true</item> <item name="android:backgroundDimAmount">0.7</item> </style>
0 0
- 关于dialog的一些
- 关于dialog的一些小结
- JQuery关于dialog的一些总结
- 关于网页前端框架art.dialog的一些问题
- 关于网页前端框架art.dialog的一些问题
- 如何设置dialog下面的activity不变灰色。关于dialog的一些属性设置。
- 关于Android的Dialog
- Android Dialog 的一些特性
- 关于Dialog的简单体验
- 关于android里的Dialog
- 关于dialog的一点东西
- 关于自定义Dialog的问题
- 关于dialog引起的IllegalArgumentException
- 关于自定义dialog的样式
- Dialog 的一些回调处理
- android中dialog的一些用法
- android 中Dialog的一些用法
- android 中Dialog的一些用法
- iOS开发 Error: CGImageProviderCreate: invalid image provider size
- TCP/IP_socket_in_C笔记
- Action Bank A High-Level Representation of Activity in Video实验
- Android布局文件属性值
- 开源项目SlidingMenu深入剖析
- 关于dialog的一些
- Mat遍历,if and else if else
- Scrapy 爬虫
- String数组转List,List转String数组
- 去改变自己吧,领悟到了你也会成功!
- java生产者消费者
- Maven的配置文件pom.xml
- Git和Repo管理使用简要介绍
- springmvc rest风格的实例代码demo讲解