Android中显示,隐藏Status Bar和Navigation Bar,沉浸式体验

随着Android版本的迭代更新,如何使某项特性能够兼容各个版本,一直困扰开发人员。比如状态栏(Status Bar)的显示与隐藏,本篇文章也主要讨论Android中状态栏(Status Bar)以及导航栏(Navigation Bar)的显示与隐藏。

1.在Android4.0及以下隐藏Status Bar

在Android4.0(API level 14)及以下你可以通过设置 WindowManager 的标志来隐藏Status Bar,你可以通过在代码中设置或者通过在manifest中设置activity的主题来实现。如果在你的APP中Status Bar需要一直隐藏,那么最好的方法是在manifest中设置activity或者application的主题。

<application
    ...
    android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" >
    ...
</application>

当然,你也可以在代码中设置 WindowManager 的标志来实现。这种方式使得当程序需要根据用户的交互来显示或者隐藏Status Bar变得很容易。

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // If the Android version is lower than Jellybean, use this call to hide
        // the status bar.
        if (Build.VERSION.SDK_INT < 16) {
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
        }
        setContentView(R.layout.activity_main);
    }
    ...
}


当你设置了WindowManager 的标志时,它会一直起作用,除非你清除这些标志。

那么问题来了,当我们因为需要隐藏Status Bar而激活FLAG_FULLSCREEN标志时,如果来清除此标记使得Status Bar重新显示出来。这个时候我们可以通过设置  FLAG_LAYOUT_IN_SCREEN  标记来使Status Bar重新显示,这也避免了你的布局在Status Bar显示或隐藏时需要重新调整大小。

2.在Android4.1(API level 16) 及以上隐藏Status Bar

在Android4.1(API level 16) 及以上隐藏Status Bar可以调用 setSystemUiVisibility()方法,该方法在一个独特的视图水平设置UI的标记,这些设置会聚集到window层级,相比设置WindowManager 的标记,使用这个方法可以让你对Status Bar有更细粒度的控制。

View decorView = getWindow().getDecorView();
// Hide the status bar.
int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUi
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值