Android沉浸式状态栏SystemBarTint的使用方法

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/hwe_xc/article/details/50553758

什么是沉浸式状态栏

Android从4.4开始支持这种显示效果,直接看对比图:

这里写图片描述

从上图可以看到左边淘宝APP最顶部的状态栏背景是黑色的,而右边的360手机助手那个位置不是黑色,就是用了沉浸式状态栏这种效果。

SystemBarTint的使用

那么如何给应用加上这种效果呢?
SystemBarTint是两年以前的一个开源库,现在我们依然可以用它很方便的给应用加上。
下面以Eclipse项目为例:

1、导入jar包

点击下载jar包

把下载的jar包复制到我们项目的libs文件夹下

2、xml布局文件修改

在Activity的布局文件里的顶层布局加两行代码,如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="${relativePackage}.${activityClass}"
    android:fitsSystemWindows="true"
    android:clipToPadding="false" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

</RelativeLayout>

可以看到,主要是加上了这两行代码

    android:fitsSystemWindows="true"
    android:clipToPadding="false"

上面的第一行代码fitsSystemWindows的作用是:
让view可以根据系统窗口(如status bar)来调整自己的布局,如果值为true,就会调整view的paingding属性来给system windows留出空间。

第二行代码clipToPadding 值控件的绘制区域是否在padding里面的,默认是true,设置成false就表示可已在控件外面显示。

3、Activity代码更改

直接看代码:

package com.example.systembartintexample;

import android.annotation.TargetApi;
import android.app.Activity;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;

import com.readystatesoftware.systembartint.SystemBarTintManager;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 4.4及以上版本开启
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            setTranslucentStatus(true);
        }

        SystemBarTintManager tintManager = new SystemBarTintManager(this);
        tintManager.setStatusBarTintEnabled(true);
        tintManager.setNavigationBarTintEnabled(true);

        // 自定义颜色
        tintManager.setTintColor(Color.parseColor("#24b7a4"));
    }

    @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);
    }
}

从上面代码可以看到:

第21行开始,判断一下当前设备版本号,4.4以上就开启。
第25行新建SystemBarTintManager,下面两行分别是开启状态栏和导航栏染色。
第30行可以设置显示的自定义颜色,不设置的话,默认是个浅灰色。

重点说一下setTranslucentStatus方法,首先得到我们应用的窗口布局,如果设置了显示状态栏染色的话,窗口的flag就会设置成FLAG_TRANSLUCENT_STATUS,应用所占的屏幕会扩大到全屏,这样的话,就必须让内容向下错出一个状态栏的高度。

4、效果

经过上述3个步骤,我们看到效果了,如下:

这里写图片描述


最后附上:

SystemBarTint开源库地址(需要Android studio导入运行):点击浏览

Eclipse版本DEMO地址: 点击下载

展开阅读全文

没有更多推荐了,返回首页