国产探花免费观看_亚洲丰满少妇自慰呻吟_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開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南充市| 佛山市| 东平县| 邳州市| 融水| 房山区| 鱼台县| 榆树市| 阿克陶县| 宁武县| 和政县| 东山县| 共和县| 永宁县| 临安市| 丹寨县| 德兴市| 营口市| 江都市| 金阳县| 通辽市| 建德市| 北宁市| 永新县| 永兴县| 舞钢市| 阜南县| 靖宇县| 城步| 吉木乃县| 临湘市| 漳州市| 长白| 巨野县| 仲巴县| 微山县| 湖口县| 环江| 银川市| 焉耆| 石棉县|