白底黑字!Android淺色狀態列黑色字型模式

2021-08-10 05:25:13 字數 4220 閱讀 2309

這狀態列布局和圖示挺像android,但是這白底黑字android設計規範裡可沒有啊,於是我們開發的時候果斷忽視這個狀態列了(當時大部分使用者還都是android 4.4)。

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

我:這個做不了。

設計師一臉質疑。

我: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) else

meizuflags.setint(lp, value);

window.setattributes(lp);

result = true;

} catch (exception e)

}return result;/**

* 需要miuiv6以上

* @param activity

* @param dark 是否把狀態列字型及圖示顏色設定為深色

* @return boolean 成功執行返回true

miui深色狀態列字型模式.png

flyme深色狀態列字型模式.png

官方在android6.0中提供了亮色狀態列模式,配置只需一行**:

6.0原生深色狀態列字型模式.png

網上有關狀態列顏色設定的文章很多,下面這段**是我用的狀態列設定工具類,算是乙個總結吧。

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

android:fitssystemwindows=」true」

以下為我的狀態列設定工具類:

/**

* created by 趙晨璞

*/ public class statusbarutil else

if (build.version.sdk_int >= build.version_codes.kitkat) /**

* 修改狀態列顏色,支援4.4以上版本

* @param activity

* @param colorid

*/ public static void setstatusbarcolor(activity activity,int colorid) else if (build.version.sdk_int >= build.version_codes.kitkat)

}/**

*狀態列亮色模式,設定狀態列黑色文字、圖示,

* 適配4.4以上版本miuiv、flyme和6.0以上版本其他android

* @param activity

* @return 1:miuui 2:flyme 3:android6.0

*/ public static int statusbarlightmode(activity activity)else if(flymesetstatusbarlightmode(activity.getwindow(), true))else if (build.version.sdk_int >= build.version_codes.m)

} 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)else if(type==2)else if(type==3)

/**

* 狀態列暗色模式,清除miui、flyme或6.0以上版本狀態列黑色文字、圖示

*/ public static void statusbardarkmode(activity activity,int type)else if(type==2)else if(type==3)

/**

* 設定狀態列圖示為深色和魅族特定的文字風格

* 可以用來判斷是否為flyme使用者

* @param window 需要設定的視窗

* @param dark 是否把狀態列文字及圖示顏色設定為深色

* @return boolean 成功執行返回true

* */

public static boolean flymesetstatusbarlightmode(window window, boolean dark) else

meizuflags.setint(lp, value);

window.setattributes(lp);

result = true;

} catch (exception e)

}return result;/**

* 需要miuiv6以上

* @param activity

* @param dark 是否把狀態列文字及圖示顏色設定為深色

* @return boolean 成功執行返回true

* */

public static boolean miuisetstatusbarlightmode(activity activity, boolean dark) else

result=true;

if (build.version.sdk_int >= build.version_codes.m) else 

}}catch (exception e)

}return result;

}

} 適配淺色狀態列深色字型的時候發現底層版本為android6.0.1的miui7.1系統不支援view.system_ui_flag_light_status_bar設定,還是得用miui自己的深色字型方法。

2023年7月,小公尺才終於想起來對狀態列字元顏色的邏輯做了一次調整,改為相容android原生的設定方式,但是沒給出怎麼區分舊系統與新系統的方法==、

關於 miui 狀態列字元顏色邏輯調整的說明

沒辦法,只能在設定miui狀態列的地方把兩種方法都寫上。

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

Android透明狀態列 沉浸式狀態列

注意 android版本 4.4此方法有效 第一步 在activity的布局檔案中,根布局中加入以下第5 7行 第二步 新建類kitkatutils.class package cn.powerthink.djt.utils import android.annotation.suppresslin...

android 狀態列浸透 狀態列半透明

純 設定,不用修改manifest 首先這是主介面.xml 兩種情況 第一種 去掉xml中 style 效果 主介面置頂,可以實現半透明效果 activity oncreat 中 狀態列沉浸,4.4 生效 if build.version.sdk int build.version codes.ki...

Android 狀態列收集

public class statusbarutil else if build.version.sdk int build.version codes.kitkat 修改狀態列顏色,支援4.4以上版本 param activity param colorid public static void ...