代码之家  ›  专栏  ›  技术社区  ›  user149408

OnApplyWindowInset使用奇怪的顶部插图调用

  •  0
  • user149408  · 技术社区  · 7 年前

    我有一个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

    现在我得到了一个奇怪的顶部插图,看起来总是比我预期的多5672 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()

    如果我信任这些插入值,并按指示的像素数偏移内容,以使其远离系统栏,那么最终会在视图顶部出现一个间隙。

    就我所知,左/右/底部的值似乎还可以。

    我怎样才能纠正这个问题?我是不是忽略了什么?

    1 回复  |  直到 7 年前
        1
  •  1
  •   user149408    7 年前

    由于我仍然没有解释报告的值,我认为这要么是一个bug,要么是一个缺乏文档记录的特性,尽管如此,这在许多(如果不是全部)版本的Android中都存在。

    幸运的是,至少在API 23+上,有另一种方法可以获取窗口插入,即调用 View#getWindow().getRootView().getRootWindowInsets() . 这似乎已经发生了 some bugs of its own ,即为导航栏报告不正确的插入,但合并这两个结果对我有效。

    • onApplyWindowsInsets() ,只丢弃最上面的一个。
    • 推翻 onSizeChanged() 对于视图,并在其中调用 View#getRootWindowInsets()

    这些综合价值观对我起了作用。

    不幸的是,这在API 2022上不起作用,API 2022没有实现

    Resources resources = view.getResources();
    int shid = resources.getIdentifier("status_bar_height", "dimen", "android");
    padding_top = (shid > 0) ? resources.getDimensionPixelSize(shid) : 0;
    
    推荐文章