下面的代碼是基於開源項目SystemBarTint,咱們須要添加其依賴java
compile 'com.readystatesoftware.systembartint:systembartint:1.0.3'
下面的代碼,我在類原生的Android7.0系統測試經過,其餘的國產ROM系統未進行測試android
在AndroidManifest文件中,設置themegit
按住Ctrl,點開那個theme,修改themegithub
以後在xml文件中的根節點,添加屬性android:fitsSystemWindows="true"
,同時,把背景顏色設置爲白色(這一步背景色能夠不設置,個人項目總體是白色的,看你需求)ide
下面的是把狀態欄設置爲白色,字體和圖標顏色設置爲黑色的代碼,複製一份,以後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); }
若是是單純地改變狀態欄顏色,只須要使用下面的方法便可ui
@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,來判斷當前狀態欄的顏色是否爲亮色,若是爲亮色,則設置爲黑色圖標,若是爲暗色,則設置爲白色圖標this
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); } }