又是一年双十一… Jingle bell, Jingle bell, Jingle all the way! 但是真相是: Single dog, Single dog, Single all the day!
Wednesday 14th
产品同学最近扔过来一个比较奇怪的需求: 进入我们的 app 应用时, 不显示导航栏(就是目前市面上主流手机最下面那一栏, 返回键, Home 键, 列表键那一栏).
我的第一反应是他们想做一个沉浸式(Immersive mode)的效果, (Note: 这个说法并不是官方的说法, 不过大家都这么说, 用不了多久也就成官方的了吧). 但是仔细一想, 不太一样. 沉浸式效果, 接收到 touchEvent 事件时, 导航栏还是会显示出来的, 但我我们的产品同学要完全的隐藏导航栏. = -!
因为我们的设备是定制设备, 针对商场收银用, 爱捯饬的工程师们在设置界面, 发现一个这个选项.
既然系统设置有相关的选项, 那么肯定可以通过 Java 层的代码调用, 可能使用广播的方式, 或者通过 PendingIntent
, 具体的肯定要跟 room 定制的厂商联系, 不过这个联系的过程就不说了…
那就采用另外一种方式, 通过代码层级控制, 官方文档也给出了相应的方案, 但是都是针对 Activity 的, 但是在 DialogFragment 弹出时, 导航栏还是会显示出来. stackOverFlow 上有很多种方案, 但是尝试一圈都不怎么管用. 最后在 csdn 上找到一种比较合适解决方案:
重写 DialogFragment 中的 setDialog()
方法. 给 Dialog
对应的 Window
设置 LayoutParams.FLAG_NOT_FOCUSABLE
参数.
|
|
单独设置或者通过继承, 设计模式的相关知识点就不展开了.
然后 DialogFragment 的 style 设置 (还包括隐藏软键盘, 去掉默认背景色的设置):
|
|
在 api-21 的设备上, 测试有效, 导航栏没有显示.