android沉浸式状态栏以及状态栏颜色更改

版本要求

沉浸式状态栏效果是在android 4.4的时候出现的,所以只有Android4.4及以后的版本才能使用沉浸式效果

实现方式

大体上可以分为两种思路:

1.修改状态栏的颜色使之与标题栏的背景色保持一致,以达到沉浸式效果

2.修改状态栏颜色为透明色,将标题栏扩展到状态栏下面,以达到沉浸式效果

需要注意的坑

1.需要注意的是状态栏的字体颜色

   目前可实现沉浸式效果的状态栏的字体颜色基本上只有两种,黑色和白色,但并非所有厂商都开放了状态栏颜色修改接口,就需要考虑一下情况:

      a.标题栏背景色为白色:

         可以更改状态栏颜色的机型(如Android6.0以上版本几乎都可以)将状态栏颜色改为黑色;

         不可以更改状态栏颜色的机型(如Android6.0以下部分机型,锤子),则需要将状态栏设置成半透明,否则白色背景会白色状态栏的文字看不到

     b.标题栏为非白色:

         建议采用上面实现方式2,配合android:fitsSystemWindows="true"实现

         可在BaseActivity中统一设置,毕竟并非所有的机型都可设置状态栏颜色(如锤子手机android5.1.1,最多可以做到半透明,也相当于沉浸式效果达到了)

2.白色背景标题栏的app需要分条件进行设置

   目前开放了状态栏文字颜色更改的厂商系统有MIUI、FlymeOS

      a.Android6.0以上

          更改状态栏字体颜色为黑色,并将状态栏设置为白色,系统方法设置即可

     b.MIUI、FlymeOS

          同Android6.0以上做法,需要注意判断系统类型,并通过开放的接口方法进行设置

     c.Android4.4到Android6.0之间的版本

         建议这种情况,做半透明处理,因为这个版本段的机型要么可以完全沉浸式但不能改状态栏颜色,要么就是改不了只能做到半透明效果

可参考的工具

  工具的好处是比自己完全重新去开发一个更加可靠与高效

1.https://github.com/jgilfelt/SystemBarTint,有四年没有更新维护了,部分Android6.0以上机型不能完全通过这个工具实现,需要自己加代码

2.https://github.com/gyf-dev/ImmersionBar,注释很详细的工具,考虑到了所有可能遇到的坑,包括emui

3.https://github.com/laobie/StatusBarUtil,轻量级的工具类,目前的沉浸式效果都能实现,特别是抽屉式布局方式的支持

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android 沉浸状态栏指的是在应用中隐藏系统状态栏,使应用的界面能够占据整个屏幕空间,提供更加沉浸的使用体验。在 Android 4.4 KitKat(API 级别 19)及以上版本中,引入了沉浸状态栏的支持。 要实现沉浸状态栏,可以按照以下步骤进行操作: 1. 在 AndroidManifest.xml 文件中,为对应的 Activity 设置 `android:theme` 属性为 `@style/Theme.AppCompat.NoActionBar` 或者其他无 ActionBar 特性的主题。 2. 在对应 Activity 的 `onCreate` 方法中添加以下代码来隐藏系统状态栏: ```java if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); } ``` 3. 如果你想要在状态栏下方留出一定的空间,可以设置 paddingTop,例如: ```java if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { int statusBarHeight = getStatusBarHeight(); View view = findViewById(R.id.your_view_id); view.setPadding(0, statusBarHeight, 0, 0); } private int getStatusBarHeight() { int result = 0; int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android"); if (resourceId > 0) { result = getResources().getDimensionPixelSize(resourceId); } return result; } ``` 这样就可以实现 Android 沉浸状态栏的效果。需要注意的是,沉浸状态栏可能会导致一些 UI 布局的问题,需要根据具体情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值