這狀態列布局和圖示挺像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 ...