Skip to content
This repository was archived by the owner on Mar 3, 2020. It is now read-only.

Commit 87732c4

Browse files
committed
状态栏颜色修正
1 parent e3db95c commit 87732c4

9 files changed

Lines changed: 215 additions & 5 deletions

File tree

app/src/main/java/cc/zsakvo/yueduhchelper/CacheHelperActivity.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import cc.zsakvo.yueduhchelper.task.WriteFile;
4040
import cc.zsakvo.yueduhchelper.utils.Divider;
4141
import cc.zsakvo.yueduhchelper.utils.SnackbarUtil;
42+
import cc.zsakvo.yueduhchelper.utils.StatusbarUtil;
4243
import io.github.tonnyl.whatsnew.WhatsNew;
4344
import io.github.tonnyl.whatsnew.item.WhatsNewItem;
4445

@@ -72,6 +73,11 @@ protected void onCreate(Bundle savedInstanceState) {
7273
super.onCreate(savedInstanceState);
7374
setContentView(R.layout.activity_cache_helper);
7475

76+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
77+
getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
78+
StatusbarUtil.setStatusBarColor(CacheHelperActivity.this,R.color.grey);
79+
}
80+
7581
toolbar = findViewById(R.id.cache_toolbar);
7682
toolbar.setTitle("阅读缓存提取");
7783
toolbar.setTitleTextColor(getResources().getColor(R.color.colorAccent));

app/src/main/java/cc/zsakvo/yueduhchelper/ExportActivity.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,15 @@
1414
import cc.zsakvo.yueduhchelper.utils.Divider;
1515
import cc.zsakvo.yueduhchelper.utils.SnackbarUtil;
1616
import cc.zsakvo.yueduhchelper.utils.SourceUtil;
17+
import cc.zsakvo.yueduhchelper.utils.StatusbarUtil;
1718

1819
import android.annotation.SuppressLint;
1920
import android.content.DialogInterface;
2021
import android.content.Intent;
2122
import android.graphics.Color;
2223
import android.graphics.PorterDuff;
2324
import android.graphics.drawable.Drawable;
25+
import android.os.Build;
2426
import android.os.Bundle;
2527
import android.util.Log;
2628
import android.view.Menu;
@@ -59,6 +61,11 @@ protected void onCreate(Bundle savedInstanceState) {
5961
super.onCreate(savedInstanceState);
6062
setContentView(R.layout.activity_export);
6163

64+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
65+
getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
66+
StatusbarUtil.setStatusBarColor(ExportActivity.this,R.color.grey);
67+
}
68+
6269
toolbar = findViewById(R.id.export_toolbar);
6370
toolbar.setTitle("导出为TXT");
6471
toolbar.setTitleTextColor(getResources().getColor(R.color.colorAccent));

app/src/main/java/cc/zsakvo/yueduhchelper/SettingsActivity.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import cc.zsakvo.yueduhchelper.listener.ChangePathListener;
2323
import cc.zsakvo.yueduhchelper.utils.DirChooseUtil;
2424
import cc.zsakvo.yueduhchelper.utils.SnackbarUtil;
25+
import cc.zsakvo.yueduhchelper.utils.StatusbarUtil;
2526

2627
public class SettingsActivity extends AppCompatActivity {
2728

@@ -33,6 +34,11 @@ protected void onCreate(Bundle savedInstanceState) {
3334

3435
setContentView(R.layout.activity_settings);
3536

37+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
38+
getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
39+
StatusbarUtil.setStatusBarColor(SettingsActivity.this,R.color.grey);
40+
}
41+
3642
toolbar = findViewById(R.id.toolbar);
3743
toolbar.setTitle("设置");
3844
toolbar.setTitleTextColor(getResources().getColor(R.color.colorAccent));
Lines changed: 190 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,190 @@
1+
package cc.zsakvo.yueduhchelper.utils;
2+
3+
import android.annotation.TargetApi;
4+
import android.app.Activity;
5+
import android.graphics.Color;
6+
import android.os.Build;
7+
import android.view.View;
8+
import android.view.Window;
9+
import android.view.WindowManager;
10+
11+
import java.lang.reflect.Field;
12+
import java.lang.reflect.Method;
13+
14+
/**
15+
* Created by FuKaiqiang on 2017-08-30.
16+
*/
17+
18+
public class StatusbarUtil {
19+
/**
20+
* 修改状态栏为全透明
21+
* @param activity
22+
*/
23+
@TargetApi(19)
24+
public static void transparencyBar(Activity activity){
25+
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
26+
Window window = activity.getWindow();
27+
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
28+
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
29+
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
30+
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
31+
window.setStatusBarColor(Color.TRANSPARENT);
32+
33+
} else
34+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
35+
Window window =activity.getWindow();
36+
window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
37+
WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
38+
}
39+
}
40+
41+
/**
42+
* 修改状态栏颜色,支持4.4以上版本
43+
* @param activity
44+
* @param colorId
45+
*/
46+
public static void setStatusBarColor(Activity activity,int colorId) {
47+
48+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
49+
Window window = activity.getWindow();
50+
// window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
51+
window.setStatusBarColor(activity.getResources().getColor(colorId));
52+
}
53+
// } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
54+
// //使用SystemBarTint库使4.4版本状态栏变色,需要先将状态栏设置为透明
55+
// transparencyBar(activity);
56+
// SystemBarTintManager tintManager = new SystemBarTintManager(activity);
57+
// tintManager.setStatusBarTintEnabled(true);
58+
// tintManager.setStatusBarTintResource(colorId);
59+
// }
60+
}
61+
62+
/**
63+
*状态栏亮色模式,设置状态栏黑色文字、图标,
64+
* 适配4.4以上版本MIUIV、Flyme和6.0以上版本其他Android
65+
* @param activity
66+
* @return 1:MIUUI 2:Flyme 3:android6.0
67+
*/
68+
public static int StatusBarLightMode(Activity activity){
69+
int result=0;
70+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
71+
if(MIUISetStatusBarLightMode(activity, true)){
72+
result=1;
73+
}else if(FlymeSetStatusBarLightMode(activity.getWindow(), true)){
74+
result=2;
75+
}else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
76+
activity.getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
77+
result=3;
78+
}
79+
}
80+
return result;
81+
}
82+
83+
/**
84+
* 已知系统类型时,设置状态栏黑色文字、图标。
85+
* 适配4.4以上版本MIUIV、Flyme和6.0以上版本其他Android
86+
* @param activity
87+
* @param type 1:MIUUI 2:Flyme 3:android6.0
88+
*/
89+
public static void StatusBarLightMode(Activity activity,int type){
90+
if(type==1){
91+
MIUISetStatusBarLightMode(activity, true);
92+
}else if(type==2){
93+
FlymeSetStatusBarLightMode(activity.getWindow(), true);
94+
}else if(type==3){
95+
activity.getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
96+
}
97+
98+
}
99+
100+
/**
101+
* 状态栏暗色模式,清除MIUI、flyme或6.0以上版本状态栏黑色文字、图标
102+
*/
103+
public static void StatusBarDarkMode(Activity activity,int type){
104+
if(type==1){
105+
MIUISetStatusBarLightMode(activity, false);
106+
}else if(type==2){
107+
FlymeSetStatusBarLightMode(activity.getWindow(), false);
108+
}else if(type==3){
109+
activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
110+
}
111+
112+
}
113+
114+
115+
/**
116+
* 设置状态栏图标为深色和魅族特定的文字风格
117+
* 可以用来判断是否为Flyme用户
118+
* @param window 需要设置的窗口
119+
* @param dark 是否把状态栏文字及图标颜色设置为深色
120+
* @return boolean 成功执行返回true
121+
*
122+
*/
123+
public static boolean FlymeSetStatusBarLightMode(Window window, boolean dark) {
124+
boolean result = false;
125+
if (window != null) {
126+
try {
127+
WindowManager.LayoutParams lp = window.getAttributes();
128+
Field darkFlag = WindowManager.LayoutParams.class
129+
.getDeclaredField("MEIZU_FLAG_DARK_STATUS_BAR_ICON");
130+
Field meizuFlags = WindowManager.LayoutParams.class
131+
.getDeclaredField("meizuFlags");
132+
darkFlag.setAccessible(true);
133+
meizuFlags.setAccessible(true);
134+
int bit = darkFlag.getInt(null);
135+
int value = meizuFlags.getInt(lp);
136+
if (dark) {
137+
value |= bit;
138+
} else {
139+
value &= ~bit;
140+
}
141+
meizuFlags.setInt(lp, value);
142+
window.setAttributes(lp);
143+
result = true;
144+
} catch (Exception e) {
145+
146+
}
147+
}
148+
return result;
149+
}
150+
151+
/**
152+
* 需要MIUIV6以上
153+
* @param activity
154+
* @param dark 是否把状态栏文字及图标颜色设置为深色
155+
* @return boolean 成功执行返回true
156+
*
157+
*/
158+
public static boolean MIUISetStatusBarLightMode(Activity activity, boolean dark) {
159+
boolean result = false;
160+
Window window=activity.getWindow();
161+
if (window != null) {
162+
Class clazz = window.getClass();
163+
try {
164+
int darkModeFlag = 0;
165+
Class layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams");
166+
Field field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE");
167+
darkModeFlag = field.getInt(layoutParams);
168+
Method extraFlagField = clazz.getMethod("setExtraFlags", int.class, int.class);
169+
if(dark){
170+
extraFlagField.invoke(window,darkModeFlag,darkModeFlag);//状态栏透明且黑色字体
171+
}else{
172+
extraFlagField.invoke(window, 0, darkModeFlag);//清除黑色字体
173+
}
174+
result=true;
175+
176+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
177+
//开发版 7.7.13 及以后版本采用了系统API,旧方法无效但不会报错,所以两个方式都要加上
178+
if(dark){
179+
activity.getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN| View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
180+
}else {
181+
activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
182+
}
183+
}
184+
}catch (Exception e){
185+
186+
}
187+
}
188+
return result;
189+
}
190+
}

app/src/main/res/values-v23/styles.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
<style name="AppTheme.PreferenceTheme" parent="PreferenceThemeOverlay">
55
<!-- Only need this on pre-Lollipop -->
6-
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
6+
<item name="colorPrimaryDark">@color/grey</item>
77
<item name="colorAccent">@color/colorAccent</item>
88
<item name="preferenceTheme">@style/AppTheme.PreferenceTheme</item>
99
<item name="android:windowLightStatusBar">true</item>

app/src/main/res/values-v27/styles.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<item name="android:navigationBarDividerColor">#ff545454</item>
99
</style>
1010
<style name="Base.V27.Theme.AppCompat.Light" parent="@style/Base.V26.Theme.AppCompat.Light">
11-
<item name="android:navigationBarColor">@android:color/white</item>
11+
<item name="android:navigationBarColor">@color/grey</item>
1212
<item name="android:windowLightNavigationBar">true</item>
1313
<item name="android:navigationBarDividerColor">#ffdcdcdc</item>
1414
</style>

app/src/main/res/values-v28/styles.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<item name="android:navigationBarDividerColor">#ff545454</item>
99
</style>
1010
<style name="Base.V28.Theme.AppCompat.Light" parent="@style/Base.V26.Theme.AppCompat.Light">
11-
<item name="android:navigationBarColor">@android:color/white</item>
11+
<item name="android:navigationBarColor">@color/grey</item>
1212
<item name="android:windowLightNavigationBar">true</item>
1313
<item name="android:navigationBarDividerColor">#ffdcdcdc</item>
1414
</style>

app/src/main/res/values/colors.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
<color name="colorPrimary">#e0e0e0</color>
55
<color name="colorAccent">#4285f4</color>
66
<color name="white">#ffffff</color>
7+
<color name="grey">#fafafa</color>
78
<color name="ripple">#1F000000</color>
89
<color name="divider">#70aeaeae</color>
910
</resources>

app/src/main/res/values/styles.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
<!-- Base application theme. -->
44
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
55
<!-- Customize your theme here. -->
6-
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
6+
<item name="colorPrimaryDark">@color/grey</item>
77
<item name="colorAccent">@color/colorAccent</item>
8-
<item name="colorPrimary">@color/colorPrimary</item>
8+
<item name="colorPrimary">@color/white</item>
99
<item name="preferenceTheme">@style/AppTheme.PreferenceTheme</item>
1010
</style>
1111

0 commit comments

Comments
 (0)