1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Android实现沉浸式状态栏

Android实现沉浸式状态栏

时间:2023-06-09 11:32:56

相关推荐

Android实现沉浸式状态栏

我认为有如下两种沉浸式效果:

左边是将状态栏完全消失,除非手动让其显示。

右边是将状态栏与图片融为一体,状态栏以透明显示。

左边实现:

View decorView = getWindow().getDecorView();int option = View.SYSTEM_UI_FLAG_FULLSCREEN;decorView.setSystemUiVisibility(option);

这里先调用getWindow().getDecorView()方法获取到了当前界面的DecorView,然后调用它的setSystemUiVisibility()方法来设置系统UI元素的可见性。其中,SYSTEM_UI_FLAG_FULLSCREEN表示全屏的意思,也就是会将状态栏隐藏。

右边实现:

if (Build.VERSION.SDK_INT >= 21) {View decorView = getWindow().getDecorView();int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN| View.SYSTEM_UI_FLAG_LAYOUT_STABLE;decorView.setSystemUiVisibility(option);getWindow().setStatusBarColor(Color.TRANSPARENT);}

首先这种效果只支持5.0以上的安卓设备,SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN和SYSTEM_UI_FLAG_LAYOUT_STABLE,注意两个Flag必须要结合在一起使用,表示会让应用的主体内容占用系统状态栏的空间,最后再调用Window的setStatusBarColor()方法将状态栏设置成透明色就可以了。

隐藏导航栏

上面我们对状态栏进行了隐藏,那我们可不可以对导航栏隐藏?当然可以

View decorView = getWindow().getDecorView();int option = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION| View.SYSTEM_UI_FLAG_FULLSCREEN;decorView.setSystemUiVisibility(option);

SYSTEM_UI_FLAG_HIDE_NAVIGATION和SYSTEM_UI_FLAG_FULLSCREEN,这样就可以将状态栏和导航栏同时隐藏了。

if (Build.VERSION.SDK_INT >= 21) {View decorView = getWindow().getDecorView();int option = View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN| View.SYSTEM_UI_FLAG_LAYOUT_STABLE;decorView.setSystemUiVisibility(option);getWindow().setNavigationBarColor(Color.TRANSPARENT);getWindow().setStatusBarColor(Color.TRANSPARENT);}

SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION,表示会让应用的主体内容占用系统导航栏的空间,然后又调用了setNavigationBarColor()方法将导航栏设置成透明色。

注意

前面我们实现沉浸式状态栏,是通过状态栏和图片融为一体,设置透明色实现的。此时图片是占用了状态栏的位置,因为是张图片所以没什么影响,但换成标题栏:

发现标题栏占用了状态栏的空间,十分不美观,如何解决呢?so easy ,我们把状态栏颜色与标题栏的背景色统一不就行了嘛!!!

if (Build.VERSION.SDK_INT >= 21) {Window window = getWindow();//取消设置透明状态栏,使 ContentView 内容不再覆盖状态栏window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);//需要设置这个 flag 才能调用 setStatusBarColor 来设置状态栏颜色window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);//设置状态栏颜色window.setStatusBarColor(getResources().getColor(R.color.colorPrimary)); }

总结:

好了沉浸式先告一段落。

参考 :/guolin_blog/article/details/51763825

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。