下麵的代碼是基於開源項目 "SystemBarTint" ,我們需要添加其依賴 下麵的代碼,我在類原生的Android7.0系統測試通過,其他的國產ROM系統未進行測試 設置狀態欄白色 1. 設置主題theme 在AndroidManifest文件中,設置theme 按住Ctrl,點開那個theme ...
下麵的代碼是基於開源項目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);
}
}