注:以下说的Content View指 通过findViewById(android.R.id.content)得到的FrameLayout布局对象.
4.0及以下两种方法
1,通过特定的主题,如Theme.Black.NoTitleBar.Fullscreen.
2,通过代码
在Activity中
隐藏状态栏:getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
显示状态栏:getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
这样设置的隐藏/显示会在当前activity中一直保持,直到你手动改变.
还有一个属性是WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
这个属性一般是系统默认加上的,代表Content View的大小是多少,设置FLAG_LAYOUT_IN_SCREEN属性代表以当前屏幕的大小作为Content View的大小.否则代表当前屏幕的大小减去decor view(如状态栏)的大小.
4.1及以上
1,通过主题改变
2,通过代码
隐藏
View v = getWindow().getDecorView();
v.setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);显示
View v = getWindow().getDecorView();
v.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
注意,这样设置后,当你离开activity后,View的flag会被清空,所以如果你想在回到当前activity后继续保留上一个状态,那么需要你手动的保存和恢复上一个状态.
比如在onresume()或者onWindowFocusChanged()中设置,http://developer.android.com/training/system-ui/visibility.html 参考这里可以监听UI Visibility的改变
注意:调用setSystemUiVisibility的View必须是Visible的,该flag设置才会有效果.
还有最后一条规则,actionbar和status bar的隐藏要统一,也就是说最好做到状态栏和action bar一起隐藏.不要只隐藏其中一个,以统一视觉效果.
另外
在4.1及以上可以使Content View出现在状态栏的下面,即overlay的这种模式.
通过给View设置SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN SYSTEM_UI_FLAG_LAYOUT_STABLE这两个属性即可.
如果这样设置,那么你就要确保你的Content View中的UI元素不会被Status Bar挡住,
或者可以简单的将android:fitsSystemWindows = “true”属性添加到布局属性中,该属性会使布局留出恰当的高度以避免被系统元素遮挡. 简单来讲该属性就像是个margin属性,为系统UI留出了padding.
SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN代表Content View以屏幕大小为边界,不考虑status bar,如果不设置SYSTEM_UI_FLAG_LAYOUT_STABLE
则当window出现变化时(比如Status bar显示/隐藏)系统会以多个Rect调用View的fitSystemVisibility方法,反之则只会以最坏情况(即Status bar展现时的Rect)的Rect调用.