Android Toolbar 透明化解决方案

来源:互联网 发布:网络空间主权是我国 编辑:程序博客网 时间:2024/05/14 04:18

本博文摘录了一套解决Toolbar透明化问题的方法,如果想看更详细的,请移步至原文:
http://www.jianshu.com/p/34a8b40b9308

一 、前言

网上已经有很多有关于系统状态栏的解决方案,这篇文章也不会有什么新奇的解决方案,都是本人经过自己试验,统计提炼出来的相对靠谱的一套解决方案.

如果是android大牛可以忽略本文,怕让您贱笑.只面向小白,帮助小白减少摸索的时间.

二、效果图

废话少说,先展示效果图:

问题解决前:
这里写图片描述

问题解决后:

这里写图片描述

三、 实现步骤

1、引入v7包,并在布局里添加toolbar

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

2、在代码中设置透明化:

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {            Window window = getWindow();            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);            window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);            window.setStatusBarColor(Color.TRANSPARENT);        }

当然也可以通过主题来修改,需要在values、values-v19、values-v21目录下分别创建相应的主题:

values:

<style name="MDTheme" parent="AppTheme"></style>

values-v19

<style name="MDTheme" parent="Theme.AppCompat.Light.NoActionBar">        <item name="android:windowTranslucentStatus">true</item>        <item name="android:windowTranslucentNavigation">false</item></style>

values-v21

<style name="MDTheme" parent="Theme.AppCompat.Light.NoActionBar">        <item name="android:windowTranslucentStatus">true</item>        <item name="android:windowTranslucentNavigation">false</item>        <item name="android:statusBarColor">@android:color/transparent</item></style>

3、给toolbar加上padding-top,toolbar代码如下:

        <android.support.v7.widget.Toolbar            android:id="@+id/toolbar"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:minHeight="?attr/actionBarSize"            android:paddingTop="@dimen/toolbar_padding_top"            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"            app:layout_collapseMode="pin"            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

4、其中android:paddingTop=”@dimen/toolbar_padding_top”要在values中设为0dp,在values-v19中设为25dp,如下:

values

<dimen name="padding_top">0dp</dimen>

values-v19

<dimen name="padding_top">25dp</dimen>

到这里,或许有人就会问了,为什么是25dp呢?大家可以通过以下代码获取像素转成dp试试:

来自 stormzhang 的博文,想看详情的可以移至薄荷TOOLBAR(ACTIONBAR)的适配方案

public int getStatusBarHeight() {      int result = 0;    int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");    if (resourceId > 0) {        result = getResources().getDimensionPixelSize(resourceId);    }    return result;}  

四、 总结

本博文主要摘录了一套解决Toolbar透明化问题的方法,帮助和我(博主本人)一样的小白减少摸索时间。本方法只是一个参考,网上也有很多的解决方案,如:

使用开源库SystemBarTint,这个库也挺不错的,可以动态改变系统状态栏颜色,但是作者已经2年没有维护了,现在技术更新迭代这么快,鬼知道这个库会不会出现什么问题,因此可以放弃使用了

原创粉丝点击