美文网首页
安卓4.4沉浸式状态栏自定义与5.0统一

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

作者: 空空大师丶 | 来源:发表于2017-08-14 09:10 被阅读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));

    相关文章

      网友评论

          本文标题:安卓4.4沉浸式状态栏自定义与5.0统一

          本文链接:https://www.haomeiwen.com/subject/yebyrxtx.html