JYDialog(DialogPlus)为什么显示的时候没有全屏显示(没有遮挡状态栏和标题栏)

目前在有的项目中显示对话框的Dialog是用的JYDialog来完成的,用法很简单,查看过部分源码,发现并不是系统自带的Dialog,但是在显示的时候会出现状态栏不能遮挡的问题,显示如下:


图1

会发现Dialog是在状态栏以下开始显示的,无法遮盖住状态栏,会有留白。如果项目中用到了Toolbar后标题栏也不会被覆盖如下图:


图2
Dialog是在标题栏(Toolbar)以下显示的,如果标题栏不是Toolbar是自定义的View,就会显示正常,如图1的样式。为什么会出现上面这两种情况呢?
首先查看JYDialog代码,看一下是如何实现的。dialog显示的是show()方法,代码如下:
图3
图4

通过代码可以看出将rootView通过addView的方式动态添加到decorView布局中,rootView是通过inflate填充的JYDialog真正的布局文件。重点是看decorView,而decorView是什么呢?继续查看代码,看decorView是在哪初始化的。
图5
看到这里我们大概会有点明白了为什么显示的时候会在状态栏以下显示了,这里的decorView跟真正意义的decorView是有区别的,并不是窗口的顶级视图。应该是DecorView负责绘制用户定义UI的视图区域,首先我们先了解一些基础,Activity的Gui构建的大致模型简图
图6
我们可以通过Layout Inspector来查看下布局层级,Layout Inspector是Android studio自带的视图层次结构分析工具(Android Studio 2.2及其之后版本),界面虽不如Hierarchy View直观,但是提供的信息也足够详细了。
我们可以随便创建一个布局文件,带Toolbar标题栏的情况。运行项目后,打开Layout Inspector如下图所示:
图7
主要看第二层的LinearLayout->FrameLayout,LinearLayout是我们创建布局的根布局。DecorView是PhoneWindow类的内部类。该类是一个FrameLayout的子类,并且是PhoneWindow的子类,该类就是对普通的FrameLayout进行功能的扩展,更确切点可以说是修饰(Decor的英文全称是Decoration,即“修饰”的意思),比如说添加TitleBar(标题栏),以及TitleBar上的滚动条等 。最重要的一点是,它是所有应用窗口的根View ,我们的自定义布局其实都是加到了id/content下。而JYDialog是通过DecorView获取的android.R.id.content,通过addView动态添加到FrameLayout中 所以JYDialog显示是在状态栏和标题栏下显示的。

我们来看一下当JYDialog显示时候的层级视图,验证下是不是所说的添加到Fragment中
图8

这会明显的看出JYDialog显示的区域是在什么位置,所以会出现标题栏和状态栏不能覆盖,显示的很奇怪。

JYDialog并不是在所有的项目中都会显示成这样,这主要是跟SDK版本相关。在不同的SDK版本下,该FrameLayout所指的显示区域也不同。具体如下
在sdk 14+(native ActionBar),该显示区域指的是ActionBar下面的部分
在Support Library revision lower than 19,使用AppCompat,则显示区域包含ActionBar
在Support Library revision 19 (or greater),使用AppCompat,则显示区域不包含ActionBar,即行为与第一种情况相同。
所以如果不使用Support Library或使用Support Library的最新版本,则R.id.content所指的区域都是ActionBar以下。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351