android 显示/隐藏状态栏(Status bar)

本文介绍了在Android系统中如何控制状态栏的显示和隐藏。4.0及以下可通过特定主题或代码实现,使用WindowManager.LayoutParams.FLAG_FULLSCREEN进行设置。4.1及以上版本除了代码操作,还可以使用View的setSystemUiVisibility方法,并需要注意状态栏与ActionBar的同步隐藏。此外,4.1以上版本支持Content View覆盖状态栏,通过设置SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN和SYSTEM_UI_FLAG_LAYOUT_STABLE属性,或使用android:fitsSystemWindows="true"来避免内容被遮挡。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注:以下说的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调用.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值