看了一些关于应用顶部状态栏的文章,在此记录一下
一,修改状态栏的情况有哪些
在android开发中,有时候我们需要对应用打开时手机顶部的状态栏进行一些效果上的改变,比如:改变其背景颜色,使其与应用主色调相同或者不突兀;使状态栏背景色透明,同时使应用的ContentView延伸到状态栏下面。
上面这些需求在Android4.4之后好像才可以,在Android原生系统6.0+,或者MIUI6+,Flyme4+等定制系统才支持状态栏字体修改的。
xml文件实现:
在application节点设置theme属性
android:theme="@style/AppTheme"
在values/theme.xml中
<style name="AppTheme" parent="AppBaseTheme">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
在v19/theme.xml中
<style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!--contentView的位置上移,状态栏透明-->
<item name="android:windowTranslucentStatus">true</item>
</style>
这样的话整个应用的界面就会上移,状态栏透明。
不过好像对于5.0+的系统以上设置的结果可能不是透明的。我手头有两部手机,一部小米5(7.0系统),一部联想手机(4.4系统),以上设置均可实现界面上移,状态栏透明。(这个后面会附上其它好文)
二,项目中开发
上一家公司开发项目时,设计图上是顶部的状态栏的颜色和应用头部背景色一致,用户中心的顶部又要上移到状态栏下方。即前面见到的两张图片。当时想了很久,水平不够,有些东西理解不到。最后只实现了第一张图,未实现第二张图。这周周末想了想觉得没有解决掉总是不好的,所以看了看一些文章,写了个Demo解决下。
代码实现:
思路:继承一个布局,比如LinearLayout,当系统版本是4.4及以上时,设置padding值中的topPadding值为 getPaddingTop() + SystemBarUtils.getStatusBarHeight(getContext());
代码:
private void setInit() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
setPadding(getPaddingLeft(),
getPaddingTop() + SystemBarUtils.getStatusBarHeight(getContext()),
getPaddingRight(),
getPaddingBottom());
}
}
MainActivity的根布局使用的是LinearLayout,而上面的这个重写的布局是作为里面的前四个个Fragment的布局文件的根布局,UserCenterFragment的根布局也是使用的LinearLayout。