Android DecorView setFitsSystemWindows

时间:2014-11-21 11:38:22

标签: android android-layout

我正在使用AndroidResideMenu(https://github.com/SpecialCyCi/AndroidResideMenu),我发现了与视图大小相关的问题。
该库通过膨胀FrameLayout,从DecorView中删除当前视图并将其添加到新的FrameLayout(其中还包含用于添加菜单项的滚动视图和阴影视图)来工作。
旧视图保留其大小和位置,但新的FrameLayout似乎处于全屏模式,并且在菜单打开时隐藏在状态栏下,如我在此处所述(https://github.com/SpecialCyCi/AndroidResideMenu/issues/33)。
在api14 +设备中,可以通过在ResideMenu中添加对setFitsSystemWindow(true)的调用来解决问题,但我不知道在旧设备中该怎么做。
想法?

谢谢!

1 个答案:

答案 0 :(得分:2)

好吧,我找到了解决方案。 只需实现方法fitSystemWindows(Rect insets),制作此方法文档中的内容(我直到现在才误解):

  

此方法的默认实现只是将内容insets应用于视图的填充,消耗该内容(将insets修改为0),并返回true。默认情况下,此行为是关闭的,但可以通过setFitsSystemWindows(boolean)启用。

所以,在ResideMenu班:

@Override
protected boolean fitSystemWindows(Rect insets) {
    setPadding(paddingLeft + insets.left, paddingTop + insets.top, ...);
    insets.left = insets.top = insets.right = insets.bottom = 0;
    return true;
}

希望这有帮助!