我们都知道,android全屏切换方式如下代码:
if (isScreenOriatationPortrait(getActivity())) {// 当屏幕是竖屏时
// 点击后变横屏
WindowManager.LayoutParams attrs = getActivity().getWindow().getAttributes();
<span style="white-space:pre"></span><pre name="code" class="java"><span style="white-space:pre"> </span><span style="color:#ff0000;">getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);</span>
getActivity().getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);// 设置当前activity为横屏 }else{
getActivity().getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN, WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);// 设置当前activity为竖屏
}
public boolean isScreenOriatationPortrait(Context context) {
return context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT;
}
但是实际操作中,第一次点击时是正常的,但是第二次点击发现全屏的横屏的通知栏没有消失,后来想了一下,是因为getActivity().getWindow().setFlag完毕后没有清理掉,那么第二次设置全屏的时候window的FLAG状态会是FLAG_FULLSCREEN|FLAG_FORCE_NOT_FULLSCREEN这样,这种情况window就变成了既是全屏又不是全屏的状态。经本人测试这时候activity的高度是全屏,但是却又有通知栏,activity的布局会被挤下去。
解决方式就是在设置window.setFlag之前,对window对象清理一下FLAG,即调用getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN)这样就正常了。