BottomSheetDialog 沉浸式的一些坑

3,027 阅读2分钟

Intro 大话安卓是一个Android技术分享平台,聊聊Android开发那些事,不止于Android。。。

本文作者

本文有N氧化碳投稿,N氧化碳大神曾自己开发了一款N氧化碳桌面浏览器,感兴趣的童鞋可百度下载使用。N氧化碳大神目前从事Android客户端开发,代表作品有“花哪儿”,目前在各大应用市场可下载,前段时间曾被老罗直播推荐使用。

N氧化碳的博客地址:

http://www.jianshu.com/u/9262245aa99d


01

BottomSheetDialog是什么?


简单的说就是基于屏幕底端的弹出式布局,上下拖拽就可以实现打开到全屏或关闭的效果,具体的来看下网易云音乐和微信中的你就明白它是个啥了




使用方法也很简单,先在Gradle中添加:


再添加代码就能用了:


可以看到这玩意的本质是一个对话框(其实还用FrameLayout可以用有兴趣的去研究下)可是,无论如何这个对话框却不是沉浸式的,该如何是好?


02

BottomSheetDialog沉浸式的探索


首先我就不提那一圈又是自定义Theme的又是给添加WindowManagerFLAG的有多蛋疼了,前者根本无效,后者沉浸式倒是沉浸式了然而你在状态栏给我留着个灰条闹哪样

好吧废话不多说上代码吧

首先基于上边说的后者,能沉浸式但有灰条的,起码成功了一半,先上改良后的代码:


好了,沉浸式了,但两个问题,一是灰条怎么去除,二是这布局拖上天后状态栏下边还是灰条透明的呀,不会插在状态栏后边口牙,这画风不对口牙!



添加了flag的BottomSheetDialog


好吧回到问题,Android 5.x+的状态栏灰条如何去除.....

嗯,如果你去百度Google找,congratulation,没用。

至于原因,去试试就知道了

那么该怎么办呢?

答案如下,重写BottomSheetDialog。以下是重写BottomSheetDialog的全部代码,将布局高度设置为全屏幕高度:


配合调用代码:


看下效果,嗯,结果不错,完美解决:



刚打开的截图



全屏后

至于为啥改了个高度就解决了灰条问题?因为在Google的Android社区里头一群老外也在讨论这事儿,有人提到修改就可以搞定了...这什么逻辑。好吧我会继续探索它的原因,不过起码问题是解决了,有需要的可以用上边的代码直接沉浸式BottomSheetDialog,希望对大家有所帮助。

原讨论贴戳这里(请自备梯子):

https://code.google.com/p/android/issues/detail?id=202691