博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
更简单更全的material design状态栏
阅读量:4505 次
发布时间:2019-06-08

本文共 6407 字,大约阅读时间需要 21 分钟。

从实际使用须要出发,以最简单的方式实现了几种类型的MD状态栏。

(重点在fitsSystemWindows的使用)

0,使用前提

Theme.AppCompat.Light.DarkActionBar

targetSdkVersion 23;

support librariy 23.3.0

styles-v19: <item name="android:windowTranslucentStatus">true</item>

styles-v21+: <item name="android:windowDrawsSystemBarBackgrounds">true</item>  <item name="android:statusBarColor">@android:color/transparent</item>

1。最普通的类型:仅仅有一个ToolBar

layout:

.java:

/** * 简单型状态栏(ToolBar) * * @param activity */public static void setOrdinaryToolBar(Activity activity) {    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {        activity.getWindow().setStatusBarColor(ContextCompat.getColor(activity, R.color.colorPrimaryDark));    } else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {        setKKStatusBar(activity, R.color.colorPrimaryDark);    }}
效果:

左:Android4.4  右:Android6.0

2,图片全屏透明状态栏(图片位于状态栏以下)

layout:

.java

 
/** * 图片全屏透明状态栏(图片位于状态栏以下) * * @param activity */public static void setImageTransparent(Activity activity) {    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {        activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);    }}

效果:

左:Android4.4  右:Android6.0

3,图片全屏半透明状态栏(图片位于状态栏以下)

layout:

.java:

/** * 图片全屏半透明状态栏(图片位于状态栏以下) * * @param activity */public static void setImageTranslucent(Activity activity) {    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {        activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);        activity.getWindow().setStatusBarColor(ContextCompat.getColor(activity, R.color.statusBar));    } else {        setKKStatusBar(activity, R.color.statusBar);    }}

效果:

左:Android4.4  右:Android6.0

4,ToolBar+TabLayout状态栏(ToolBar可伸缩)

layout:

.java:

/** * ToolBar+TabLayout状态栏(ToolBar可伸缩) * * @param activity */public static void setToolbarTabLayout(Activity activity) {    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {        activity.getWindow().setStatusBarColor(ContextCompat.getColor(activity, R.color.colorPrimaryDark));    }}

效果:

Android4.4:

Android6.0:

5。DrawerLayout+ToolBar+TabLayout状态栏(ToolBar可伸缩)

layout:

.java:

/** * DrawerLayout+ToolBar+TabLayout状态栏(ToolBar可伸缩) * * @param activity * @param drawerLayout * @param coordinatorLayout */public static void setDrawerToolbarTabLayout(Activity activity, CoordinatorLayout coordinatorLayout) {    if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {        ViewGroup contentLayout = (ViewGroup) activity.findViewById(android.R.id.content);        contentLayout.getChildAt(0).setFitsSystemWindows(false);        coordinatorLayout.setFitsSystemWindows(true);        setKKStatusBar(activity, R.color.statusBar);    }}

效果:

Android4.4:

Android6.0:

6,CollapsingToolbarLayout状态栏(可折叠图片)

layout:

.java:

/** * CollapsingToolbarLayout状态栏(可折叠图片) * * @param activity * @param coordinatorLayout * @param appBarLayout * @param imageView * @param toolbar */public static void setCollapsingToolbar(Activity activity, CoordinatorLayout coordinatorLayout,                                        AppBarLayout appBarLayout, ImageView imageView, Toolbar toolbar) {    if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {        coordinatorLayout.setFitsSystemWindows(false);        appBarLayout.setFitsSystemWindows(false);        imageView.setFitsSystemWindows(false);        toolbar.setFitsSystemWindows(true);        CollapsingToolbarLayout.LayoutParams lp = (CollapsingToolbarLayout.LayoutParams) toolbar.getLayoutParams();        lp.height = (int) (getStatusBarHeight(activity) +                activity.getResources().getDimension(R.dimen.abc_action_bar_default_height_material));        toolbar.setLayoutParams(lp);        setKKStatusBar(activity, R.color.statusBar);        setCollapsingToolbarStatus(appBarLayout);    }}

效果:

Android4.4:

Android6.0:

7,DrawerLayout+ToolBar型状态栏

layout:

.java:

/** * DrawerLayout+ToolBar型状态栏 * * @param activity */public static void setDrawerToolbar(Activity activity) {    if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {        ViewGroup contentLayout = (ViewGroup) activity.findViewById(android.R.id.content);        contentLayout.getChildAt(0).setFitsSystemWindows(false);        setKKStatusBar(activity, R.color.statusBar);    }}

其他:

/** * Android4.4上CollapsingToolbar折叠时statusBar显示和隐藏 * * @param appBarLayout */private static void setCollapsingToolbarStatus(AppBarLayout appBarLayout) {    ViewCompat.setAlpha(mStatusBarView, 1);    appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {        @Override        public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {            int maxScroll = appBarLayout.getTotalScrollRange();            float percentage = (float) Math.abs(verticalOffset) / (float) maxScroll;            ViewCompat.setAlpha(mStatusBarView, percentage);        }    });}private static void setKKStatusBar(Activity activity, int statusBarColor) {    ViewGroup contentView = (ViewGroup) activity.findViewById(android.R.id.content);    mStatusBarView = contentView.getChildAt(0);    //改变颜色时避免反复加入statusBarView    if (mStatusBarView != null && mStatusBarView.getMeasuredHeight() == getStatusBarHeight(activity)) {        mStatusBarView.setBackgroundColor(ContextCompat.getColor(activity, statusBarColor));        return;    }    mStatusBarView = new View(activity);    ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,            getStatusBarHeight(activity));    mStatusBarView.setBackgroundColor(ContextCompat.getColor(activity, statusBarColor));    contentView.addView(mStatusBarView, lp);}private static int getStatusBarHeight(Context context) {    int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");    return context.getResources().getDimensionPixelSize(resourceId);}

效果:

Android4.4:

Android6.0:

OK!

源代码地址:

转载于:https://www.cnblogs.com/gccbuaa/p/7298616.html

你可能感兴趣的文章
oracle cursor
查看>>
Response.StatusCode的HTTP状态代码列表
查看>>
win7下maven安装和配置
查看>>
C# 多线程编程 ThreadStart ParameterizedThreadStart
查看>>
Android Camera Parameters 方法出错,求教
查看>>
一个仿照系统UIAlertView写的提示框
查看>>
Genymotion集成到Eclipse
查看>>
代码简洁之四 统一抽象层次
查看>>
IOS 缩放图片常用方法
查看>>
软件工程课
查看>>
Pycharm-连接服务器
查看>>
[Leetcode] The Skyline Problem
查看>>
okhttp异步请求流程和源码分析
查看>>
【集合框架】JDK1.8源码分析之Comparable && Comparator(九)
查看>>
Flutter之内置动画(转)
查看>>
uni-app中onLoad不起作用
查看>>
多线程概述
查看>>
Linux_ubuntu命令-用户、权限管理
查看>>
Knowladge_网站学习_RSS 学习
查看>>
TCP/IP,Web世界的基本规则
查看>>