从实际使用须要出发,以最简单的方式实现了几种类型的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:

<android.support.design.widget.CoordinatorLayout>

    <android.support.design.widget.AppBarLayout>

        <android.support.v7.widget.Toolbar
android:layout_height="wrap_content"
android:fitsSystemWindows="true"/> </android.support.design.widget.AppBarLayout> </android.support.design.widget.CoordinatorLayout>

.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:

<android.support.design.widget.CoordinatorLayout>

    <ImageView/>

    <android.support.v7.widget.Toolbar
android:layout_height="wrap_content"
android:fitsSystemWindows="true"/> </android.support.design.widget.CoordinatorLayout>

.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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

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

layout:

<android.support.design.widget.CoordinatorLayout>

    <ImageView/>

    <android.support.v7.widget.Toolbar
android:layout_height="wrap_content"
android:fitsSystemWindows="true"/> </android.support.design.widget.CoordinatorLayout>

.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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

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

layout:

<android.support.design.widget.CoordinatorLayout
android:background="@color/colorPrimaryDark"
android:fitsSystemWindows="true"> <android.support.design.widget.AppBarLayout> <android.support.v7.widget.Toolbar
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways|snap"/> <android.support.design.widget.TabLayout/> </android.support.design.widget.AppBarLayout> <android.support.v4.widget.NestedScrollView/> </android.support.design.widget.CoordinatorLayout>

.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:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

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

layout:

<android.support.v4.widget.DrawerLayout
android:fitsSystemWindows="true"> <android.support.design.widget.CoordinatorLayout
android:background="@color/colorPrimary"> <android.support.design.widget.AppBarLayout> <android.support.v7.widget.Toolbar
android:layout_height="wrap_content"
app:layout_scrollFlags="scroll|enterAlways|snap"/> <android.support.design.widget.TabLayout/> </android.support.design.widget.AppBarLayout> <android.support.v4.widget.NestedScrollView
android:background="@android:color/white"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/> </android.support.design.widget.CoordinatorLayout> <android.support.design.widget.NavigationView
android:fitsSystemWindows="true"/> </android.support.v4.widget.DrawerLayout>

.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:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

Android6.0:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

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

layout:

<android.support.design.widget.CoordinatorLayout
android:fitsSystemWindows="true"> <android.support.design.widget.AppBarLayout
android:fitsSystemWindows="true"> <android.support.design.widget.CollapsingToolbarLayout> <ImageView
android:fitsSystemWindows="true"/> <android.support.v7.widget.Toolbar
android:layout_height="?attr/actionBarSize"
app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"/> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> <android.support.v4.widget.NestedScrollView
app:layout_behavior="@string/appbar_scrolling_view_behavior"/> </android.support.design.widget.CoordinatorLayout>

.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:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

Android6.0:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

7,DrawerLayout+ToolBar型状态栏

layout:

<android.support.design.widget.CoordinatorLayout>

    <android.support.design.widget.AppBarLayout>

        <android.support.v7.widget.Toolbar
android:layout_height="wrap_content"
android:fitsSystemWindows="true"/> </android.support.design.widget.AppBarLayout> <include layout="@layout/content_main"/> </android.support.design.widget.CoordinatorLayout>

.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.4CollapsingToolbar折叠时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://github.com/XYScience/MDStatusBar

更简单更全的material design状态栏的更多相关文章

  1. 采用ADM2483磁隔离器让RS485接口更简单更安全

    采用ADM2483磁隔离器让RS485接口更简单更安全 摘要:本文介绍RS485的特点及应用,指出了普通RS485接口易损坏的问题,针对存在的问题介绍了以ADM2483为核心的磁隔离解决方案. 关键词 ...

  2. TSQL:让监控分析更简单更高效

    1. 前言 阿里时序时空数据库TSDB最新推出TSQL,支持标准SQL的语法和函数.用户使用熟悉的SQL,不仅仅查询更简单易用,用户还可以利用SQL强大的功能,实现更加复杂的计算分析. 2. 为什么需 ...

  3. Anno 让微服务、混合编程更简单(Net love Java)

    在社区或者QQ群我们经常看到有人争辩编程语言的好坏,只要一提起这个话题常常就能引来很多人参与,往往最后就变成了一群人几个小时的骂战.今天我们要说的是如何让Java和.Net(甚至更多语言)相结合.充分 ...

  4. [翻译]Kafka Streams简介: 让流处理变得更简单

    Introducing Kafka Streams: Stream Processing Made Simple 这是Jay Kreps在三月写的一篇文章,用来介绍Kafka Streams.当时Ka ...

  5. Kafka Streams简介: 让流处理变得更简单

    Introducing Kafka Streams: Stream Processing Made Simple 这是Jay Kreps在三月写的一篇文章,用来介绍Kafka Streams.当时Ka ...

  6. 走着官方的教程入门Material Design(一)

    又到期末了,学习下Google的材料设计.写下此文记录自己的同时,分享给需要的同学,若发现文中有什么问题和不对,欢迎指出 使用 Material Design 创建新应用 首先需要使用材料主题 如果是 ...

  7. 【知识必备】一文让你搞懂design设计的CoordinatorLayout和AppbarLayout联动,让Design设计更简单~

    一.写在前面 其实博主在之前已经对design包的各个控件都做了博文说明,无奈个人觉得理解不够深入,所以有了这篇更加深入的介绍,希望各位看官拍砖~ 二.从是什么开始 1.首先我们得知道Coordina ...

  8. 让全链路压测变得更简单!Takin2.0重磅来袭!

    自Takin社区版1.0发布两个多月以来,有很多测试同学陆续在各自的工作中运用了起来,其中包括金融.电商.物流.出行服务等行业.这个过程中我们收到了很多同学的反馈建议,同时也了解到很多同学在落地全链路 ...

  9. Android Material Design简单使用

    吐槽 作为一个 Android developer,没有什么比拿着 UI 设计的一堆 iOS 风格的设计 来做需求更恶心的了,基本所有空间都要照着 iOS 来画一遍,Material Design 辣 ...

随机推荐

  1. Arduino可穿戴教程之第一个程序——上传运行程序(四)

    Arduino可穿戴教程之第一个程序——上传运行程序(四) 2.4.5  上传程序 现在所有Arduino IDE的设置都完成了,我们就可以将示例程序上传到板子中了.这非常简单,只需要单击如图2.45 ...

  2. 【UOJ 34】 多项式乘法 (FFT)

    [题意] 给你两个多项式,请输出乘起来后的多项式. 先打一个递归版本的模板... #include<cstdio> #include<iostream> #include< ...

  3. 【期望DP】BZOJ4008- [HNOI2015]亚瑟王

    题目大意 有\(n\)张卡牌,\(r\)轮游戏.每张卡牌只能用至多一次,每张卡牌被用到的概率为\(p_i\).现在从左往右轮,直到最右一张卡片或者某张卡片被用到.如果某张卡牌被用到,产生\(d_i\) ...

  4. 修改npm仓库地址

    在C:\Users\Administrator文件夹下找到.npmrc 添加registry = http://registry.cnpmjs.org淘宝镜像地址,保存

  5. [转]String.Replace 和 String.ReplaceAll 的区别

    JAVA 中的 replace replaceAll 问题: 测试code System.out.println("1234567890abcdef -----> "+&qu ...

  6. ExtJs ComboBox 在IE 下 自动完成功能无效的解决方案

    使用 ComboBox 来作为自动完成的组件,就像google suggestion ,可是在IE下怎么也无法输入字符,是处于不可编辑状态,而firefox和chrome都正常显示.我在2个ExtJs ...

  7. Java过滤任意(script,html,style)标签符,返回纯文本--封装类

     import java.util.regex.Pattern;   /**  * 过滤标签字符串,返回纯文本  *  */ public class ChangePlainText {        ...

  8. H2数据库使用 详解

    H2最完整的资料下载地址: http://download.csdn.net/detail/yixiaoping/5956595 H2数据库使用   H2数据库介绍 常用的开源数据库:H2,Derby ...

  9. Windows UWP开发系列 – RelativePanel

    RelativePanel是在Windows 10 UWP程序中引入的一种新的布局面板,它是通过附加属性设置元素间的位置关系来对实现布局的.一个简单的示例如下: <RelativePanel&g ...

  10. Visual Studio 2015创建Shared Project时出错

    今天使用Visual Studio 2015创建共享项目的时候发现如下错误: 网上搜了一下,发现了同样有人问这个问题的问题:Why can't I create Shared Project in V ...