日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

白底黑字!Android浅色状态栏黑色字体模式

發布時間:2024/1/18 Android 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 白底黑字!Android浅色状态栏黑色字体模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

公司項目UI改版的時候,把大部分標題欄都設計成了白色,給我們的設計圖是這個樣子的:


設計圖.png

這狀態欄布局和圖標挺像Android,但是這白底黑字Android設計規范里可沒有啊,于是我們開發的時候果斷忽視這個狀態欄了。

結果設計師拿著測試版過來問,你們安卓這個狀態欄顏色怎么沒改啊。

我:這個做不了。

設計師一臉質疑。

我:Android4.4以上系統版本可以修改狀態欄顏色,但是只有小米的MIUI、魅族的Flyme和Android6.0以上系統可以把狀態欄文字和圖標換成深色,其他的系統狀態欄文字都是白色的,換成淺色背景的話就看不到了。

設計師一臉懵逼不知所云。

后來看著這黑色狀態欄白色標題欄實在難看,而且自己用的是MIUI,于是還是做了適配。

其實很多國內三方Android系統都有深色狀態欄字體模式,但是目前只看到了小米和魅族公開了各自的實現方法,小米的支持MIUI V6以上版本,魅族的支持Flyme4.0以上版本。代碼如下:

/*** 設置狀態欄圖標為深色和魅族特定的文字風格,Flyme4.0以上* 可以用來判斷是否為Flyme用戶* @param window 需要設置的窗口* @param dark 是否把狀態欄字體及圖標顏色設置為深色* @return boolean 成功執行返回true**/ public static boolean FlymeSetStatusBarLightMode(Window window, boolean dark) {boolean result = false;if (window != null) {try {WindowManager.LayoutParams lp = window.getAttributes();Field darkFlag = WindowManager.LayoutParams.class.getDeclaredField("MEIZU_FLAG_DARK_STATUS_BAR_ICON");Field meizuFlags = WindowManager.LayoutParams.class.getDeclaredField("meizuFlags");darkFlag.setAccessible(true);meizuFlags.setAccessible(true);int bit = darkFlag.getInt(null);int value = meizuFlags.getInt(lp);if (dark) {value |= bit;} else {value &= ~bit;}meizuFlags.setInt(lp, value);window.setAttributes(lp);result = true;} catch (Exception e) {}}return result; }/*** 設置狀態欄字體圖標為深色,需要MIUIV6以上* @param window 需要設置的窗口* @param dark 是否把狀態欄字體及圖標顏色設置為深色* @return boolean 成功執行返回true**/ public static boolean MIUISetStatusBarLightMode(Window window, boolean dark) {boolean result = false;if (window != null) {Class clazz = window.getClass();try {int darkModeFlag = 0;Class layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams");Field field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE");darkModeFlag = field.getInt(layoutParams);Method extraFlagField = clazz.getMethod("setExtraFlags", int.class, int.class);if(dark){extraFlagField.invoke(window,darkModeFlag,darkModeFlag);//狀態欄透明且黑色字體}else{extraFlagField.invoke(window, 0, darkModeFlag);//清除黑色字體}result=true;}catch (Exception e){}}return result; }
MIUI深色狀態欄字體模式.png
Flyme深色狀態欄字體模式.png

官方在Android6.0中提供了亮色狀態欄模式,配置只需一行代碼:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {activity.getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);}
6.0原生深色狀態欄字體模式.png

網上有關狀態欄顏色設置的文章很多,下面這段代碼是我用的狀態欄設置工具類,算是一個總結吧。

官方在4.4版本只提供了狀態欄透明的api,大家普遍采用開源庫SystemBarTint對4.4版本狀態欄顏色進行設置,請各位自行下載。

在設置狀態欄全透明后,整個activity布局都會上移充滿整個屏幕,如果你不想讓布局上移的話就需要在根布局設置

android:fitsSystemWindows="true"

以下為我的狀態欄設置工具類:

/*** Created by 趙晨璞 */ public class StatusBarUtil {/*** 修改狀態欄為全透明* @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);} elseif (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {Window window =activity.getWindow();window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);} }/*** 修改狀態欄顏色,支持4.4以上版本* @param activity* @param colorId*/ public static void setStatusBarColor(Activity activity,int colorId) {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(colorId));} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {//使用SystemBarTint庫使4.4版本狀態欄變色,需要先將狀態欄設置為透明transparencyBar(activity);SystemBarTintManager tintManager = new SystemBarTintManager(activity);tintManager.setStatusBarTintEnabled(true);tintManager.setStatusBarTintResource(colorId);} }/***設置狀態欄黑色字體圖標,* 適配4.4以上版本MIUIV、Flyme和6.0以上版本其他Android* @param activity* @return 1:MIUUI 2:Flyme 3:android6.0*/ public static int StatusBarLightMode(Activity activity){int result=0;if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {if(MIUISetStatusBarLightMode(activity.getWindow(), true)){result=1;}else if(FlymeSetStatusBarLightMode(activity.getWindow(), true)){result=2;}else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {activity.getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);result=3;}}return result; }/*** 已知系統類型時,設置狀態欄黑色字體圖標。* 適配4.4以上版本MIUIV、Flyme和6.0以上版本其他Android* @param activity* @param type 1:MIUUI 2:Flyme 3:android6.0*/ public static void StatusBarLightMode(Activity activity,int type){if(type==1){MIUISetStatusBarLightMode(activity.getWindow(), true);}else if(type==2){FlymeSetStatusBarLightMode(activity.getWindow(), true);}else if(type==3){activity.getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);}}/*** 清除MIUI或flyme或6.0以上版本狀態欄黑色字體*/ public static void StatusBarDarkMode(Activity activity,int type){if(type==1){MIUISetStatusBarLightMode(activity.getWindow(), false);}else if(type==2){FlymeSetStatusBarLightMode(activity.getWindow(), false);}else if(type==3){activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);}}/*** 設置狀態欄圖標為深色和魅族特定的文字風格* 可以用來判斷是否為Flyme用戶* @param window 需要設置的窗口* @param dark 是否把狀態欄字體及圖標顏色設置為深色* @return boolean 成功執行返回true**/ public static boolean FlymeSetStatusBarLightMode(Window window, boolean dark) {boolean result = false;if (window != null) {try {WindowManager.LayoutParams lp = window.getAttributes();Field darkFlag = WindowManager.LayoutParams.class.getDeclaredField("MEIZU_FLAG_DARK_STATUS_BAR_ICON");Field meizuFlags = WindowManager.LayoutParams.class.getDeclaredField("meizuFlags");darkFlag.setAccessible(true);meizuFlags.setAccessible(true);int bit = darkFlag.getInt(null);int value = meizuFlags.getInt(lp);if (dark) {value |= bit;} else {value &= ~bit;}meizuFlags.setInt(lp, value);window.setAttributes(lp);result = true;} catch (Exception e) {}}return result; }/*** 設置狀態欄字體圖標為深色,需要MIUIV6以上* @param window 需要設置的窗口* @param dark 是否把狀態欄字體及圖標顏色設置為深色* @return boolean 成功執行返回true**/ public static boolean MIUISetStatusBarLightMode(Window window, boolean dark) {boolean result = false;if (window != null) {Class clazz = window.getClass();try {int darkModeFlag = 0;Class layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams");Field field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE");darkModeFlag = field.getInt(layoutParams);Method extraFlagField = clazz.getMethod("setExtraFlags", int.class, int.class);if(dark){extraFlagField.invoke(window,darkModeFlag,darkModeFlag);//狀態欄透明且黑色字體}else{extraFlagField.invoke(window, 0, darkModeFlag);//清除黑色字體}result=true;}catch (Exception e){}}return result; }}

適配淺色狀態欄深色字體的時候發現底層版本為Android6.0.1的MIUI7.1系統不支持View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR設置,還是得用MIUI自己的深色字體方法。

三方Android系統對底層改的挺亂的,也是讓人頭痛。O__O


神馬?寫了這么多,你就說了句圖里的妹子挺好看的。。。

圖片是隨手從網上找的。。。

如果你覺得本文有點用處或是覺得我找的這張圖不錯就請隨手點個贊吧。。。

總結

以上是生活随笔為你收集整理的白底黑字!Android浅色状态栏黑色字体模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。