您的位置:首页 > 移动开发

RN app开发适配安卓6.0 状态栏字体颜色为深色

2018-01-16 13:25 211 查看

RN app开发适配安卓6.0+ 状态栏字体颜色为深色

设置状态栏字体颜色的类,主要处理android 6 以下的机型

package com.xxx;

import android.app.Activity;
import android.os.Build;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class MIUIHelper {

/**
* 需要MIUIV6以上
*
* @param activity
* @param dark     是否把状态栏字体及图标颜色设置为深色
* @return boolean 成功执行返回true
*/
public static boolean MIUISetStatusBarLightMode(Activity activity, boolean dark) {
if(Build.VERSION.SDK_INT >= 24){
return false;
}
boolean result = false;
Window window=activity.getWindow();
if (window != null) {
Class clazz = window.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);
if(dark){
extraFlagField.invoke(window,darkModeFlag,darkModeFlag);//状态栏透明且黑色字体
}else{
extraFlagField.invoke(window, 0, darkModeFlag);//清除黑色字体
}
result=true;

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
//开发版 7.7.13 及以后版本采用了系统API,旧方法无效但不会报错,所以两个方式都要加上
if(dark){
activity.getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN| View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}else {
activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
}
}
}catch (Exception e){

}
}
return result;
}
}


在项目的MainActivity中调用,这里是UI异步渲染

@Override
public void onCreate (Bundle savedInstanceState){
super.onCreate(savedInstanceState);

MIUIHelper.MIUISetStatusBarLightMode(this, true);
}
4000
>

兼容机型MIX 2等高版本MIUI

AndroidManifest.xml 将targetSdkVersion设置成25

    <uses-sdk
android:minSdkVersion="16"
android:targetSdkVersion="25" />


app/build.gradle 将targetSdkVersion设置成25

defaultConfig {
applicationId "com.mimall"
minSdkVersion 16
targetSdkVersion 25
versionCode 8
versionName "1.0.8"
ndk {
abiFilters "armeabi-v7a", "x86"
}
}


在页面中设置StatusBar

<StatusBar backgroundColor="transparent" barStyle={"dark-content"}/>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: