2017-05-14 171 views
3

我想要白色狀態欄,並且也想要帶有默認顏色的狀態欄圖標。但現在狀態欄顏色是白色,但狀態欄圖標顏色不會更改爲深色默認顏色。我的主題代碼棉花糖windowLightStatusBar = true在MI手機中不工作

值-V23/styles.xml

<style name="AppTheme.NoActionBar"> 

     <item name="windowActionBar">false</item> 
     <item name="windowNoTitle">true</item> 
     <item name="android:windowLightStatusBar">true</item> 
     <item name="android:windowTranslucentStatus">true</item> 
     <item name="android:windowDrawsSystemBarBackgrounds">true</item> 
     <item name="android:statusBarColor">@android:color/white</item> 
    </style> 

我設置windowLightStatusBar爲真其所有設備的工作,但MI手機不能正常工作。

<item name="android:windowLightStatusBar">true</item> 

我附上MI設備和intex設備的屏幕截圖。 MI設備狀態欄圖標以白色顯示,intex設備以黑暗的默認顏色顯示。

回答

7
public static boolean setMiuiStatusBarDarkMode(Activity activity, boolean darkmode) { 
    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); 
     return true; 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return false; 
} 

setMiuiStatusBarDarkMode(YourBaseActivity.this,true); 

它就像一個魅力。

+0

是它的工作thanx :) –

+0

嚴重的是,我想給這個答案更多的投票,:) –

+0

如果他們在相同的操作系統版本,但不同的MIUI版本更改類名MiuiWindowManager?所以如果發生這種情況,這個代碼將不能在MIUI中使用不同的類名(MiuiWindowManager)嗎? –