1. 程式人生 > >最簡潔的方式改變狀態列背景色

最簡潔的方式改變狀態列背景色

    最近翻看了幾篇部落格,看看大神們對處理狀態列背景色的處理方式,大部分都是用到了第三方的一些jar,講的很細,很是佩服,不過我比較懶,發現一種偷懶的方式解決狀態列背景色修改問題。

  下面給出我的佈局程式碼

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns: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> <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>

常規佈局 肯定是你熟悉並且常用的佈局

我們來看下效果

當然光靠這佈局,是看不出來這種效果的,還需要對程式碼配合

下面給出我的程式碼

@Override
protected void onCreate(Bundle savedInstanceState) {
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);
RelativeLayout statusBars = (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);
}
}
程式碼很簡單就這麼多,效果如下

    至此完了,就這麼多程式碼,沒有依賴任何第三方的東西。

   值得一提的是,一般都是基於API19以上的版本來操作的,我這種做法也不例外。我就是偷了個懶。對狀態列設定透明後會引起高度丟失的問題,試過其他部落格中提到的在根佈局或者最靠近根佈局的那個控制元件中設定如下屬性

android:clipToPadding="true"
android:fitsSystemWindows="true"

但是效果不理想,於是就想到了這個方法。

條條大道去羅馬,能實現你想要的效果這才是最終目的。