下面的代碼是基于開源專案SystemBarTint,我們需要添加其依賴
compile 'com.readystatesoftware.systembartint:systembartint:1.0.3'
下面的代碼,我在類原生的Android7.0系統測驗通過,其他的國產ROM系統未進行測驗
設定狀態欄白色
1. 設定主題theme
在AndroidManifest檔案中,設定theme

按住Ctrl,點開那個theme,修改theme

2. 設定xml檔案
之后在xml檔案中的根節點,添加屬性android:fitsSystemWindows="true",同時,把背景顏色設定為白色(這一步背景色可以不設定,我的專案整體是白色的,看你需求)

3. 添加代碼
下面的是把狀態欄設定為白色,字體和圖示顏色設定為黑色的代碼,復制一份,之后Activity對應的java檔案中的setContentView之前呼叫setWhiteBar(this)方法即可
我是把下面的代碼封裝到了一個狀態欄工具類,之后呼叫
public static void setWhiteBar(Activity activity) {
//設定狀態欄為全透明
transparencyBar(activity);
//設定狀態欄為白色
SystemBarTintManager tintManager = new SystemBarTintManager(activity);
tintManager.setStatusBarTintEnabled(true);
tintManager.setStatusBarTintResource(R.color.color_white);
//設定狀態欄字體和圖示為黑色
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
}
/**
* 修改狀態欄為全透明
*
* @param activity
*/
@TargetApi(19)
public static void transparencyBar(Activity activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = activity.getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(Color.TRANSPARENT);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Window window = activity.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
}
Activity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
StatusBarUtil.setWhiteBar(this);
setContentView(R.layout.activity_main);
}
其他補充
改變狀態欄顏色
如果是單純地改變狀態欄顏色,只需要使用下面的方法即可
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public static void setStatusBarColor(int statusColor, Activity activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = activity.getWindow();
//取消設定Window半透明的Flag
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//添加Flag把狀態欄設為可繪制模式
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
//設定狀態欄顏色
window.setStatusBarColor(statusColor);
}
}
動態設定狀態欄字體顏色
可以通過設定一個boolean,來判斷當前狀態欄的顏色是否為亮色,如果為亮色,則設定為黑色圖示,如果為暗色,則設定為白色圖示
boolean isLightColor;
int color= Color.parseColor("#f0f0f0");
double v = ColorUtils.calculateLuminance(color);
//判斷顏色亮色
if(v>=0.5){
isLightColor = true;
}else{
isLightColor = false;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if(isLightColor){
//設定黑色字體顏色
activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}else{
//設定白色字體顏色
activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
}
}
參考鏈接:Android沉浸式和狀態欄顏色的修改
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/57437.html
標籤:Android
