安卓4.4沉浸式状态栏自定义与5.0统一

2017-08-14  本文已影响0人  空空大师丶

一.概述

安卓自4.4版本支持一种半透明状态栏的效果,在国内更多称之为沉浸式顶栏.


二.沉浸式状态栏的实现

1.引入相关依赖

compile 'com.android.support:appcompat-v7:22.2.1'

compile 'com.android.support:support-v4:22.2.1'

compile 'com.android.support:design:22.2.0'

2.定义资源文件

color.xml styles.xml values-v19

3.布局文件

activity_main.xml

一个LinearLayout作为内容区域,一个NavigationView作为菜单。

注意下Toolbar的高度应设置为wrap_content。

left_layout.xml

大体看完布局文件以后,有几个点要特别注意:

ToolBar高度设置为wrap_content

ToolBar添加属性android:fitsSystemWindows="true"

header_just_username.xml的跟布局RelativeLayout,添加属性android:fitsSystemWindows="true"

android:fitsSystemWindows这个属性,主要是通过调整当前设置这个属性的view的padding去为我们的status_bar留下空间。

4.    4.4 版本与5.0的统一

我们可以通过自己定义一个View去填充

package com.status.demo;

import android.annotation.TargetApi;

import android.app.Activity;

import android.content.Context;

import android.graphics.Color;

import android.os.Build;

import android.view.View;

import android.view.ViewGroup;

/**

* Created by zhy on 15/9/21.

*/

public class StatusBarCompat {

private static final int INVALID_VAL = -1;

private static final int COLOR_DEFAULT = Color.parseColor("#20000000");

@TargetApi(Build.VERSION_CODES.LOLLIPOP)

public static void compat(Activity activity,intstatusColor){

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){

if(statusColor != INVALID_VAL){

activity.getWindow().setStatusBarColor(statusColor);

}

return;

}

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP){

intcolor = COLOR_DEFAULT;

ViewGroup contentView = (ViewGroup) activity.findViewById(android.R.id.content);if(statusColor != INVALID_VAL){

color = statusColor;

}

View statusBarView =newView(activity);

ViewGroup.LayoutParams lp =newViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,

getStatusBarHeight(activity));

statusBarView.setBackgroundColor(color);

contentView.addView(statusBarView, lp);

}

}

public static void compat(Activity activity){

compat(activity, INVALID_VAL);

}

public static int getStatusBarHeight(Context context){

intresult =0;

intresourceId = context.getResources().getIdentifier("status_bar_height","dimen","android");

if(resourceId >0){

result = context.getResources().getDimensionPixelSize(resourceId);

}

return result;

}

}

只需要在Activity里面去写上:

StatusBarCompat.compat(this);

或者你要自己定义颜色

StatusBarCompat.compat(this, getResources().getColor(R.color.status_bar_color));

上一篇下一篇

猜你喜欢

热点阅读