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();
}
这段代码是用于Android应用中实现状态栏透明和设置黑色字体的示例。通过反射MiuiWindowManager$LayoutParams类的相关字段和方法,动态设置窗口的额外标志来达到效果。如果只需状态栏透明,调用setExtraFlags方法一次;若要同时使状态栏透明并显示黑色字体,则另外一次。最后清除黑色字体的设置。
7025

被折叠的 条评论
为什么被折叠?



