先贴个博客吧 大神们的东西毕竟666
http://blog.csdn.net/lmj623565791/article/details/48649563;
下面说说我自己的解决办法
看了N篇博客,大概改变状态栏背景色的api是从API19才开始的,最早支持4.4貌似
5.0以后就可以很炫酷的换肤了。不过想改的话貌似一大堆代码,我就偷了个懒,用最笨的方式改变了,仅供参考
下面给出我的代码
super.onCreate(savedInstanceState);
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.KITKAT) {
//透明状态栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//透明导航栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
}
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
这是onCreate里面的代码,为了方便看出代码放置的位置,上下各沾了标明位置的代码。方法比较常规判断版本
然后根据版本对状态栏进行处理
再看看我的布局文件夹
<?xml version="1.0"encoding="utf-8"?>
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/status_bar_view"
android:layout_width="match_parent"
android:layout_height="25dp"
android:layout_alignParentTop="true"
android:background="@color/colorAccent"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/status_bar_view"
android:background="@color/colorAccent"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:padding="10dp"
android:text="Back"
android:textColor="@color/white"
android:textSize="18sp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:padding="10dp"
android:text="Title"
android:textColor="@color/white"
android:textSize="18sp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:padding="10dp"
android:text="Sure"
android:textColor="@color/white"
android:textSize="18sp"/>
</RelativeLayout>
</RelativeLayout>
依旧是中规中矩的布局,效果图如下
这里我的title包含两部分内容,上面纯色的部分是为了防止设置状态栏透明后布局顶上去被遮挡预留的,如果想看到差异在哪里可以将上面的RelativeLayout设置隐藏看下效果,而且真正处理背景色的部分也就是这里,下面给出处理代码
setContentView(R.layout.activity_main);
RelativeLayoutstatusBars=(RelativeLayout)findViewById(R.id.status_bar_view);
//如果是API19及以上的版本 这样处理 否则就要隐藏了
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.KITKAT) {
statusBars.setBackgroundResource(R.color.blue);
}else{
statusBars.setVisibility(View.GONE);
}
没了,就这么多,你要处理的代码其实就一行,设置跟你的title一样的颜色就可以无缝拼接了,这里我设置替代状态栏布局的高度是25dp,是不是别的机型也是这个高度,没做过详细的研究。是不是很轻量?根本么有什么第三方包,也没有一大堆的逻辑处理,惊不惊喜?意不意外?
条条大道去罗马,实现你想要的效果才是最终目的,个人愚见,欢迎讨论(PS:本方法适用于改变状态栏背景色,不适用于改变状态栏字体色)