我有一个 Android 应用程序,其主题中有以下设置:
<item name="android:navigationBarColor">@android:color/transparent</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
层次结构中的顶部视图覆盖onApplyWindowsInsets()
. 实现只是记录WindowInsets
它被传递的信息,然后调用超类方法,记录结果并返回它——没有任何修改。日志还显示超类方法没有修改插图。
现在我得到了一个看起来很奇怪的顶部插图,它似乎总是比我预期的多 56-72 dp:
Platform DPI Layout Inset Bar Difference
Android x86_64 8.1 MDPI Landscape 88 px/dp 24 px/dp 64 px/dp
Landscape, split 80 px/dp 24 px/dp 56 px/dp
Anbox MDPI Window 64 px/dp None 64 px/dp
LineageOS 15.1 XXHDPI Portrait 240 px/80 dp 72 px/24 dp 168 px/56 dp
Portrait, split/top 216 px/73 dp 72 px/24 dp 144 px/48 dp
Portrait, split/bottom 144 px/48 dp None 144 px/48 dp
SDK Emulator (6.0) HDPI Portrait 120 px/80 dp 36 px/24 dp 84 px/56 dp
注意:在横向模式下,有两次连续调用onApplyWindowInsets()
,这里只报告最后一次。
视图实际上并没有超出可见的顶部:如果我在视图顶部绘制一个 24 像素的区域,它会出现在可见区域的顶部(即,如果有,则在状态栏下方),从不离屏。
如果我要信任这些插入值并按指示的像素数偏移内容以使其远离系统栏,我最终会在视图顶部出现间隙。
据我所知,左/右/底部值似乎还可以。
我该如何纠正?我忽略了什么吗?