MIUI 6 沉浸式狀態(tài)欄調用方法

2018-02-25 16:01 更新

MIUI 6 沉浸式狀態(tài)欄調用方法

看著iOS美膩膩的沉浸,看著MIUI 6 美膩膩的系統(tǒng)App沉浸,看著自己黑不溜秋的狀態(tài)欄!強迫癥的你還能忍受嗎?今天,正式啟動強迫癥患者拯救行動!快來將你的應用也實現(xiàn)完美沉浸吧!

一、什么是沉浸式狀態(tài)欄

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

3.png

4.png

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

1.png

2.png

二、沉浸式狀態(tài)欄實現(xiàn)代碼

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

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); //只需要狀態(tài)欄透明 extraFlagField.invoke(window, tranceFlag, tranceFlag); 或 //狀態(tài)欄透明且黑色字體 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的系統(tǒng)上實現(xiàn),其他安卓系統(tǒng)沒有效果。

  • 沉浸式效果對非MIUI系統(tǒng)的兼容性不會有任何影響。

  • google的actionbar存在bug,不支持沉浸代碼。

常見問題QA:

Q:調用沉浸代碼后,通知欄的位置會被應用主頁面占據,如何解決?如下圖:

QQ圖片20141124105603.jpg

A:這個高度,需要開發(fā)者自己來自行調整,具體方法如下:

先識別是否為MIUI系統(tǒng),識別方法:查詢property:ro.miui.ui.version.name(用反射方法拿?。凳恰盫6″就是MIUI 6系統(tǒng) 如果是,就留出額外的高度,并且調用沉浸代碼;如果不是,就保持原有的樣式 另外,整體沉浸代碼建議是在全局聲明中聲明,再在各個activity里調用

Q:頂部狀態(tài)欄的背景色是如何設置的?

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

以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號