本博文摘录了一套解决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年没有维护了,现在技术更新迭代这么快,鬼知道这个库会不会出现什么问题,因此可以放弃使用了