Android沉浸式状态栏实现

转载 2016年08月31日 14:51:26

Step1:状态栏与导航栏半透明化

  • 方法一:继承主题特定主题
    在Android API 19以上可以使用****.TranslucentDecor***有关的主题,自带相应半透明效果
    例如:

    <style name="FullBleedTheme" parent="android:Theme.Holo.Light.NoActionBar.TranslucentDecor">    
    <!-- API 19 theme customizations can go here. -->
    </style>
  • 方法二:自定义主题中使用一下设置

    <item name="android:windowTranslucentStatus" tools:targetApi="kitkat">true</item>
    <item name="android:windowTranslucentNavigation" tools:targetApi="kitkat">true</item>
  • 方法三:在Activity中设置布局文件之后调用这些代码实现

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    Window window = getWindow();
    // Translucent status bar
    window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    // Translucent navigation bar
    window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
    }

    SystemBarTint作者提供的变形方法如下

    @TargetApi(19)
    private void setTranslucentStatus(boolean on) {
    Window win = getWindow();
    WindowManager.LayoutParams winParams = win.getAttributes();
    final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
    if (on) {
        winParams.flags |= bits;
    } else {
        winParams.flags &= ~bits;
    }
    win.setAttributes(winParams);
    }

Step2:此时状态栏占有的位置消失,方法同样有三

  • 方法一:需要在布局文件根布局中添加一下代码

    android:fitsSystemWindows="true"
  • 方法二:在主题中设置如下:

    <item name="android:fitsSystemWindows">true</item>
  • 方法三:使用Java代码:

    rootview.setFitsSystemWindows(true);

Step3:设定状态栏和导航栏背景色

这时候状态栏半透明,显示的颜色根据根布局的背景颜色而来,由此可以给根布局背景色位所需的颜色即可。
但是这样会给根布局的子布局控件的背景设置带来不便。
所以采用SystemBarTint实现沉浸式状态栏
方法如下:

SystemBarTintManager tintManager = new SystemBarTintManager(this);
            tintManager.setStatusBarTintEnabled(true);
            tintManager.setNavigationBarTintEnabled(true);
            tintManager.setTintColor(ContextCompat.getColor(this, R.color.colorPrimary));

几个问题

  • 使用SystemBarTint不能给状态栏设置多个颜色,不能自动取色?
  • Android5.0(API 21)之后ActionBar主题中几个颜色代表的意义

      <style name="AppTheme" parent="android:Theme.Material">
    <!-- Main theme colors -->
    <!--   your app branding color for the app bar -->
    <item name="android:colorPrimary">@color/primary</item>
    <!--   darker variant for the status bar and contextual app bars -->
    <item name="android:colorPrimaryDark">@color/primary_dark</item>
    <!--   theme UI controls like checkboxes and text fields -->
    <item name="android:colorAccent">@color/accent</item>
      </style>
  • 定制配色工具
    (来自Android官方文档)

相关文章推荐

Android沉浸式状态栏实现

最近要做沉浸式状态栏,公司另外一个部门的同事整理了相关内容,这里做一个记录,以备查询 沉浸式状态栏技术实现 这部分是技术实现的概述,重点看第5部分,实现建议。 1.自定义状态栏背...

Android之4.4版本以上沉浸式状态栏实现

Android在4.4(KITKAT)版本加入了沉浸式,这个概念开始是在ios上使用的,现在ios的应用基本上都使用了沉浸式,而android只能在4.4及以上的版本进行使用。     先看看没有沉...

关于Android4.4以后沉浸式自定义状态栏实现

作为Android开发,在解决4.4沉浸式状态栏遇到挺多问题的,这里列出我自己的解决方案,仅供参考。 首先是主题的配置: 默认主题 styles配置: true ...

Android4.4系统以上实现沉浸式状态栏

1.在页面中判断系统是否是4.4以上的//判断当前SDK版本号,如果是4.4以上,就是支持沉浸式状态栏的 if (Build.VERSION.SDK_INT >= Build.VERS...

android状态栏实现沉浸式

安卓设置状态栏颜色

Android 沉浸式状态栏实现

Android 沉浸式状态栏实现
  • gu18168
  • gu18168
  • 2017年02月07日 21:24
  • 132

Android 沉浸式状态栏的实现

相信用过iPhone的人,都会觉得iPhone的那种沉浸式状态栏比Android那种硬邦邦的黑色状态栏要好看多了,以前的Android版本是不能进行修改了,或者说修改比较麻烦,但是4.4之后我们可以非...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android沉浸式状态栏实现
举报原因:
原因补充:

(最多只允许输入30个字)