android沉浸式 字体,Android开发 android沉浸式状态栏的适配(包含刘海屏)转载

importandroid.annotation.TargetApi;importandroid.app.Activity;importandroid.content.Context;importandroid.content.res.Resources;importandroid.os.Build;importandroid.support.annotation.ColorRes;importandroid.text.TextUtils;importandroid.util.Log;importandroid.view.View;importandroid.view.ViewGroup;importandroid.view.Window;importandroid.view.WindowManager;importcom.sandy.cloudlock.R;importjava.lang.reflect.Field;importjava.lang.reflect.Method;importjava.util.Properties;public classStatusBarCompatUtil2 {private static final int COLOR_DEFAULT =ResourceUtil.getColor(R.color.colorPrimary);private static intgetStatusBarHeight(Context context) {int statusBarHeight = 0;

Resources res=context.getResources();int resourceId = res.getIdentifier("status_bar_height", "dimen", "android");if (resourceId > 0) {

statusBarHeight=res.getDimensionPixelSize(resourceId);

}returnstatusBarHeight;

}/*** 设置状态栏透明*/

public static void setTranslucentStatus(Activity activity, @ColorRes intstatusColor) {if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.LOLLIPOP) {

Window window=activity.getWindow();

window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LAYOUT_STABLE);

window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);int color =COLOR_DEFAULT;if (statusColor != 0) {

color=ResourceUtil.getColor(statusColor);

}

window.setStatusBarColor(color);

}else if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.KITKAT) {int color =COLOR_DEFAULT;

ViewGroup contentView=activity.findViewById(android.R.id.content);if (statusColor != 0) {

color=ResourceUtil.getColor(statusColor);

}

View statusBarView= newView(activity);

ViewGroup.LayoutParams lp= newViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,

getStatusBarHeight(activity));

statusBarView.setBackgroundColor(color);

contentView.addView(statusBarView, lp);

}else{

activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

}

}/*** 改变魅族的状态栏字体为黑色,要求FlyMe4以上*/

private static void processFlyme(Activity activity, booleandarkMode) {

Window window=activity.getWindow();if (window != null) {try{

WindowManager.LayoutParams lp=window.getAttributes();

Field darkFlag= WindowManager.LayoutParams.class.getDeclaredField("MEIZU_FLAG_DARK_STATUS_BAR_ICON");

Field meizuFlags= WindowManager.LayoutParams.class.getDeclaredField("meizuFlags");

darkFlag.setAccessible(true);

meizuFlags.setAccessible(true);int bit = darkFlag.getInt((Object) null);int value =meizuFlags.getInt(lp);if(darkMode) {

value|=bit;

}else{

value&= ~bit;

}

meizuFlags.setInt(lp, value);

window.setAttributes(lp);

}catch(Exception var8) {

Log.w("StatusBarUtils", "setStatusBarDarkIcon: failed");

}

}

}/*** 改变小米的状态栏字体颜色为黑色, 要求MIUI6以上 lightStatusBar为真时表示黑色字体*/

private static void processMIUI(Activity activity, booleandarkMode) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { //即基于 Android 6.0 ,开发版 7.7.13 及以后版本

compatHighMIUI(activity, darkMode);

}else{

compatLowMIUI(activity, darkMode);

}

}

@TargetApi(Build.VERSION_CODES.M)private static void compatHighMIUI(Activity activity, booleandarkMode) {

View decorView=activity.getWindow().getDecorView();if(darkMode) {

decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);

}else{int flag = decorView.getSystemUiVisibility() & ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;

decorView.setSystemUiVisibility(flag);

}

}/*** 兼容低版本miui

*

*@paramactivity activity

*@paramdarkMode 是否夜间模式*/

private static void compatLowMIUI(Activity activity, booleandarkMode) {

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();

}

}private static final String KEY_MIUI_VERSION_CODE = "ro.miui.ui.version.code";private static final String KEY_MIUI_VERSION_NAME = "ro.miui.ui.version.name";private static final String KEY_MIUI_INTERNAL_STORAGE = "ro.miui.internal.storage";/*** 判断手机是否是小米*/

private static booleanisMIUI() {final Properties prop = newProperties();return prop.getProperty(KEY_MIUI_VERSION_CODE, null) != null

|| prop.getProperty(KEY_MIUI_VERSION_NAME, null) != null

|| prop.getProperty(KEY_MIUI_INTERNAL_STORAGE, null) != null;

}/*** 判断手机是否是魅族

*

*@return

*/

private static booleanisFlyme() {try{//Invoke Build.hasSmartBar()

final Method method = Build.class.getMethod("hasSmartBar");return method != null || TextUtils.equals("Meizu", Build.MANUFACTURER);

}catch (finalException e) {return TextUtils.equals("Meizu", Build.MANUFACTURER);

}

}/*** 设置Android状态栏的字体颜色,状态栏为亮色的时候字体和图标是黑色,状态栏为暗色的时候字体和图标为白色

*

* 设置状态栏文字色值为深色调,默认状态栏颜色透明(即同标题栏的颜色)

*

*@paramactivity activity

*@paramuseDart 是否使用深色调*/

public static void setStatusBarFontIconDark(Activity activity, booleanuseDart) {

setStatusBarFontIconDark(activity, useDart,0);

}/*** 设置Android状态栏的字体颜色,状态栏为亮色的时候字体和图标是黑色,状态栏为暗色的时候字体和图标为白色

*

* 设置状态栏文字色值为深色调

*

*@paramactivity activity

*@paramuseDart 是否使用深色调

*@paramstatusColor 自定义的状态栏颜色*/

public static void setStatusBarFontIconDark(Activity activity, boolean useDart, @ColorRes intstatusColor) {if(isMIUI()) {

processMIUI(activity, useDart);

}else{if(isFlyme()) {

processFlyme(activity, useDart);

}if(useDart) {if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.M) {int mode = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;

activity.getWindow().getDecorView().setSystemUiVisibility(mode);

}

}else{if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.JELLY_BEAN) {int mode = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |View.SYSTEM_UI_FLAG_LAYOUT_STABLE;

activity.getWindow().getDecorView().setSystemUiVisibility(mode);

}

}

activity.getWindow().getDecorView().findViewById(android.R.id.content).setPadding(0, 0, 0, 0);

}if (statusColor != 0) {if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.LOLLIPOP) {int color =ResourceUtil.getColor(statusColor);

activity.getWindow().setStatusBarColor(color);

}else if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.KITKAT) {

ViewGroup contentView=activity.findViewById(android.R.id.content);int color =ResourceUtil.getColor(statusColor);

View statusBarView= newView(activity);

ViewGroup.LayoutParams lp= newViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,

getStatusBarHeight(activity));

statusBarView.setBackgroundColor(color);

contentView.addView(statusBarView, lp);

}

}///适配虚拟按键背景色//if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {//activity.getWindow().setNavigationBarColor(COLOR_DEFAULT);//}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值