透明狀態欄或沉浸式狀態在MIUI系統下,更改系統狀態欄字體顏色的方法

這個修改方法是小米開發者論壇提供的,原文鏈接:http://dev.xiaomi.com/docs/appsmarket/technical_docs/immersion/

MIUI 6 沉浸式狀態欄調用方法

看着iOS美膩膩的沉浸,看着MIUI 6 美膩膩的系統App沉浸,看着自己黑不溜秋的狀態欄!強迫症的你還能忍受嗎?今天,正式啓動強迫症患者拯救行動!快來將你的應用也實現完美沉浸吧!

一、什麼是沉浸式狀態欄

默認情況的狀態欄是不透明白色字體的狀態欄樣式,如下圖:

enter image description hereenter image description here

目前MIUI 6的完美沉浸已經支持透明白色字體和透明黑色字體如下圖:enter image description hereenter image description here

二、沉浸式狀態欄實現代碼

第三方應用需要用反射調用,參考代碼:

Window window = getWindow();

Class clazz = window.getClass();try {int tranceFlag = 0;int darkModeFlag = 0;Class layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams");

Field field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_TRANSPARENT");tranceFlag = field.getInt(layoutParams);

field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE");darkModeFlag = field.getInt(layoutParams);

Method extraFlagField = clazz.getMethod("setExtraFlags", int.class, int.class);//只需要狀態欄透明extraFlagField.invoke(window, tranceFlag, tranceFlag);或//狀態欄透明且黑色字體extraFlagField.invoke(window, tranceFlag | darkModeFlag, tranceFlag | darkModeFlag);//清除黑色字體 extraFlagField.invoke(window, 0, darkModeFlag);} catch (NoSuchMethodException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();} catch (NoSuchFieldException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (IllegalArgumentException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}

  • 沉浸式菜單欄只能在MIUI 6的系統上實現,其他安卓系統沒有效果。
  • 沉浸式效果對非MIUI系統的兼容性不會有任何影響。
  • google的actionbar存在bug,不支持沉浸代碼。

常見問題QA:

Q:調用沉浸代碼後,通知欄的位置會被應用主頁面佔據,如何解決?如下圖:enter image description hereA:這個高度,需要開發者自己來自行調整,具體方法如下:

先識別是否爲MIUI系統,識別方法:查詢property:ro.miui.ui.version.name(用反射方法拿取),值是”V6″就是MIUI 6系統如果是,就留出額外的高度,並且調用沉浸代碼;如果不是,就保持原有的樣式另外,整體沉浸代碼建議是在全局聲明中聲明,再在各個activity裏調用

Q:頂部狀態欄的背景色是如何設置的?

A:狀態欄的背景色是跟隨該界面的activity的背景色的,您可以通過修改activity的背景色來修改狀態欄的背景色。

發佈了45 篇原創文章 · 獲贊 16 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章