Android 最新实现沉浸式状态栏的效果

简介: Android 最新实现沉浸式状态栏的效果

什么是状态栏:

是指手机屏幕最顶上,显示中国移动、安全卫士、电量、网速等等,在手机的顶部。下拉就会出现通知栏。

下面我放一张图带大家认识一下

沉浸式状态栏::

简单来说就是状态栏会根据手机内容适应性变色,使软件和系统本身更加融为一体,大大提升了用户体验。

下面我来介绍一下

一、标题栏延伸到状态栏

适用于Android6.0+

因为我的标题栏是白色,而Android 系统状态栏的字色和图标颜色也为白色,所以这样就会导致状态栏上的内容比如时间,电量等等就看不清楚了。

这个问题在Android 6.0的时候得到了解决。Android 6.0 新添加了一个属性SYSTEM_UI_FLAG_LIGHT_STATUS_BAR

代码如下:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        getWindow().setStatusBarColor(getResources().getColor(R.color.white));//设置状态栏颜色
            getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);//实现状态栏图标和文字颜色为暗色
        }

分析View一系列UI的作用:

  1. View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN: 状态栏不会被隐藏覆盖,状态栏依然可见,Activity顶端布局部分会被状态栏遮住,为避免状态栏遮挡View上的部分信息,需要为View设置fitsSystemWindows=true
  2. View.SYSTEM_UI_FLAG_FULLSCREEN: Activity全屏显示时,状态栏被隐藏覆盖掉
  3. View.SYSTEM_UI_FLAG_HIDE_NAVIGATION: 导航栏不显示,布局延伸到导航栏
  4. View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION: 导航栏显示,布局延伸到导航栏
  5. View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR: Android的状态栏的字体颜色默认为白色,只有Android6.0以后才提供了官方的API选择黑色字体

这样一步就可以实现沉浸式状态栏的效果了。

当然我们也可以在资源文件中实现这个效果:

在res文件下新建一个目录(Directory)名为:values-v21 在该目录下 创建styles.xml文件

里面代码如下:

<!--标题栏延伸到状态栏-->
<style name="MDTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
        <item name="android:windowTranslucentStatus">false</item>
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:statusBarColor">@android:color/white</item>
    </style>

之后在java文件中添加如下代码,这样才能使状态栏的字体变成暗色。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            getWindow().getDecorView().setSystemUiVisibility(
                    View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
        }

效果如下:

以上两种方法均需要在根布局添加一个属性

android:fitsSystemWindows="true"

该属性就是适应系统窗口,调整此视图的填充为系统窗口留出空间,意思就是说状态栏和标题栏不重合,如果不加此属性,标题栏会到手机的顶部,导致状态栏覆盖标题栏。

二、图片栏延伸到状态栏

同样也是在values-v21目录下的styles.xml文件中实现:

<!--    图片延伸到状态栏-->
<style name="MDTheme_IMAGE" parent="Theme.AppCompat.DayNight.NoActionBar">
        <item name="android:windowTranslucentNavigation">true</item>
        <item name="android:windowTranslucentStatus">true</item>
        <!--设置statusBarColor为透明-->
        <item name="android:statusBarColor">@android:color/transparent</item>
    </style>

效果图如下:

我们看到这并不是完全的沉浸式,而是半灰的一种效果。

接下来我们实现完全的沉浸式效果。

代码如下:

//这个特性是安卓5.0以后才支持的所以需要对系统版本号做判断
        if (Build.VERSION.SDK_INT>Build.VERSION_CODES.LOLLIPOP){
            getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            |View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            );
            getWindow().setStatusBarColor(Color.TRANSPARENT);
        }

效果图如图:

当然也可以用第三方开源库实现沉浸式状态栏 StatusBarUtil

以上就是沉浸式实现的方法,如有不当之处,欢迎大家指出,一起努力,共同进步~


目录
相关文章
|
Android开发
android Compose中沉浸式设计、导航栏、状态栏的处理
android Compose中沉浸式设计、导航栏、状态栏的处理
2658 0
android Compose中沉浸式设计、导航栏、状态栏的处理
|
Android开发
Android 状态栏WiFi图标的显示逻辑
Android 状态栏WiFi图标的显示逻辑
554 0
|
API Android开发 开发者
Android经典实战之用WindowInsetsControllerCompat方便的显示和隐藏状态栏和导航栏
本文介绍 `WindowInsetsControllerCompat` 类,它是 Android 提供的一种现代化工具,用于处理窗口插入如状态栏和导航栏的显示与隐藏。此类位于 `androidx.core.view` 包中,增强了跨不同 Android 版本的兼容性。主要功能包括控制状态栏与导航栏的显示、设置系统窗口行为及调整样式。通过 Kotlin 代码示例展示了如何初始化并使用此类,以及如何设置系统栏的颜色样式。
585 2
|
API Android开发 Kotlin
Android实战经验分享之如何获取状态栏和导航栏的高度
在Android开发中,掌握状态栏和导航栏的高度对于优化UI布局至关重要。本文介绍两种主要方法:一是通过资源名称获取,简单且兼容性好;二是利用WindowInsets,适用于新版Android,准确性高。文中提供了Kotlin代码示例,并对比了两者的优缺点及适用场景。
1094 1
|
API Android开发
31. 【Android教程】状态栏通知:Notification
31. 【Android教程】状态栏通知:Notification
1253 1
|
XML 存储 测试技术
Android系统 添加动态控制SystemUI状态栏、导航栏和下拉菜单
Android系统 添加动态控制SystemUI状态栏、导航栏和下拉菜单
2635 2
|
XML Java API
Android 沉浸式状态栏必知必会
Android 沉浸式状态栏追根究底
1173 0
|
Java 测试技术 API
Android透明状态栏和导航栏方案最终版
Android透明状态栏和导航栏方案最终版
1346 0
|
Android开发
Android 11 SystemUI(状态/导航栏)-状态栏下拉时图标的隐藏与通知面板的半透黑色背景
Android 11 SystemUI(状态/导航栏)-状态栏下拉时图标的隐藏与通知面板的半透黑色背景
1226 0
Android 11 SystemUI(状态/导航栏)-状态栏下拉时图标的隐藏与通知面板的半透黑色背景
|
Java 开发工具 Android开发
Android 11 的状态栏的隐藏
Android 11 的状态栏的隐藏
1466 0
Android 11 的状态栏的隐藏

热门文章

最新文章