国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

詳解關于MIUI 9沉浸式狀態欄的最新適配

2019-10-22 18:10:58
字體:
來源:轉載
供稿:網友

問題:

最近更新了最新的MIUI 9 系統,安裝上公司的應用之后,發現之前適配過的沉浸式狀態欄忽然沒有效果了,感覺很郁悶的我于是去網上搜了一下關于小米手機狀態欄適配方面的文章,發現大部分文章都還是之前的適配方案:

public void setStatusBarDarkMode(boolean darkmode, Activity activity) {  Class<? extends Window> clazz = activity.getWindow().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);  extraFlagField.invoke(activity.getWindow(), darkmode ? darkModeFlag : 0, darkModeFlag);  } catch (Exception e) {   e.printStackTrace();  }}

于是乎就自己去小米的開放平臺逛了逛,然后就找到了問題所在:

1、在 Android 6.0 以前,Android 沒有方法可以實現「狀態欄黑色字符」效果,因此 MIUI 自己做了一個接口。

2、在 Android 6.0 及以上版本,Android 提供了標準的方法實現「狀態欄黑色字符」效果,但這個方法和 MIUI 的方法產生了沖突,以致于當開發者使用 Android 標準方法時,沒有出現預期的效果,這給很多開發者都造成了困擾,尤其是海外開發者。

為了解決這個問題,小米覺決定在MIUI 9之后兼容Android 官方的標準方案,舍棄了自己的方案,所以說,對于MIUI9 以上版本的用戶,對于手機狀態欄深色字體的實現需要重新適配,小米官方也給出了最新的適配方案。

在新的 MIUI 版本(即基于 Android 6.0 ,開發版 7.7.13 及以后版本):

狀態欄深色字體:

Window window = getWindow();window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);

狀態欄白色字體:

int flag = window.getDecorView().getSystemUiVisibility() & ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;window.getDecorView().setSystemUiVisibility(flag);?

但是為了繼續適配之前的MIUI系統 需要在使用的時候同時寫上以上兩種方案

最后實現代碼如下:

public void setStatusBarDarkMode(boolean darkmode, Activity activity) {  Class<? extends Window> clazz = activity.getWindow().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);  extraFlagField.invoke(activity.getWindow(), darkmode ? darkModeFlag : 0, darkModeFlag);  if(darkmode){   Window window = getWindow();   window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);   window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);   window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);  }else{   int flag = activity.getWindow().getDecorView().getSystemUiVisibility()    & ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;   window.getDecorView().setSystemUiVisibility(flag);?  }  } catch (Exception e) {   e.printStackTrace();  }}

修改為以上代碼之后,終于又看到了熟悉的沉浸式效果!

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 婺源县| 闽清县| 柳江县| 砚山县| 韩城市| 讷河市| 黄龙县| 黄石市| 大姚县| 云阳县| 天峻县| 石家庄市| 英山县| 大渡口区| 牟定县| 夹江县| 三台县| 台州市| 东源县| 杂多县| 武平县| 澜沧| 罗江县| SHOW| 宜兴市| 海南省| 昆山市| 衡山县| 庄浪县| 天津市| 顺义区| 扶余县| 新绛县| 遂昌县| 克东县| 英吉沙县| 浦城县| 淳化县| 盘山县| 丘北县| 思南县|