使用Window的FLAG_FULLSCREEN时,ICS和Jelly Bean之间的行为不同

时间:2013-09-07 22:19:03

标签: java android view android-4.0-ice-cream-sandwich android-4.2-jelly-bean

我需要在现有普通DialogFragment之上显示Activity(非全屏且ActionBar可见)。
我的DialogFragment需要全屏,所以我使用以下几行来实现这一结果:

getDialog().getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
getDialog().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR);

在ICS上一切正常,我的DialogFragment全屏显示,当我关闭它时,我的Activity内容没有调整大小,因此没有布局故障(因为它应该是全屏标志)我的设置应仅影响DialogFragment所在的窗口。

在Jelly Bean上,当我关闭DialogFragment时,我看到我的Activity内容已调整大小以覆盖状态栏,因此当它尝试恢复到原始大小时会出现布局故障。
我认为这可能与引入新的系统UI标志(SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN等)有关,但我无法弄清楚如何在Jelly Bean上也有相同的ICS行为...任何想法?

1 个答案:

答案 0 :(得分:2)

找到解决方法,您需要致电:

view.setFitsSystemWindows(true);

在将全屏标志设置到窗口之前,以相同的方式:

view.setFitsSystemWindows(false);

清除之前。

view必须是Activity内的一个视图(不是您的DialogFragment!),且必须是可见的(请参阅setSystemUiVisibility(SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION) does not work

然而,在ICS上没有出现DialogFragment的解雇动画时会有一些小问题......但我认为这是另一个问题......