Android如何設定頂部狀態列顏色(主題)
阿新 • • 發佈:2019-01-04
在Android中我們經常需要設定螢幕頂部狀態列的主題和應用頁面保持同一風格,本文介紹幾種常用的設定方案:
狀態列將顯示為純淨的顏色,沒有漸變效果
/**
* 狀態列相關工具類
*
*/
public class StatusBarUtils {
//設定Activity對應的頂部狀態列的顏色
public static void setWindowStatusBarColor(Activity activity, int colorResId) {
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = activity.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(activity.getResources().getColor(colorResId));
}
} catch (Exception e) {
e.printStackTrace();
}
}
//設定Dialog對應的頂部狀態列的顏色
public static void setWindowStatusBarColor(Dialog dialog, int colorResId) {
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = dialog.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(dialog.getContext().getResources().getColor(colorResId));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
通過style來設定應用頂部狀態列的顏色
首先給出一張圖:
通過上圖,我們可以通過設定不同的屬性來達到控制不同位置顏色的目的,下面給出使用示例,修改res/values-19裡面的內容:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@android:color/holo_blue_bright</item>
<item name="colorPrimaryDark" >@android:color/holo_blue_bright</item>
</style>
主要是設定 colorPrimary,colorPrimaryDark這兩個屬性的值來設定狀態列的顏色,需要注意的是:
1:AndroidManifest.xml檔案中的targetSdkVersion必須設定在21以上。
2.parent主題必須是Theme.AppCompat開頭,相容包下的主題,所以必須一用v7包。
在頂部標題欄設定屬性值達到風格一致的目的
首先修改res/values-v19資料夾下的styles.xml檔案內容如下(如果沒有可以新建一個):
<style name="AppTheme" parent="@style/BaseAppTheme">
<item name="android:windowTranslucentStatus">true</item>
</style>
然後設定頂部標題控制元件的兩個屬性:
android:background="@android:color/holo_blue_bright"
android:fitsSystemWindows="true"
這時狀態列會保持與設定fitsSystemWindow屬性的控制元件的背景顏色一致。