android 重叠颜色,记录状态栏与布局重合,状态栏颜色问题

android:clipToPadding="true"

android:fitsSystemWindows="true"

添加在父布局XML中

4744f1dd945e

2.改变状态栏颜色与背景颜色值

调用方法:

4744f1dd945e

package com.example.administrator.myapplicationtest.Tools;

import android.annotation.TargetApi;

import android.app.Activity;

import android.content.Context;

import android.graphics.Color;

import android.os.Build;

import android.os.Environment;

import android.text.TextUtils;

import android.view.View;

import android.view.Window;

import android.view.WindowManager;

import java.io.File;

import java.io.FileInputStream;

import java.lang.reflect.Field;

import java.lang.reflect.Method;

import java.util.Properties;

/**

* auther Android

* Created by on 2019/4/5.

* Describe :

*/

public class StatusBarUtil {

class AvailableRomType {

public static final int MIUI =1;

public static final int FLYME =2;

public static final int ANDROID_NATIVE =3;

public static final int NA =4;

}

public static int getLightStatusBarAvailableRomType() {

//开发版 7.7.13 及以后版本采用了系统API,旧方法无效但不会报错

if (isMiUIV7OrAbove()) {

return AvailableRomType.ANDROID_NATIVE;

}

if (isMiUIV6OrAbove()) {

return AvailableRomType.MIUI;

}

if (isFlymeV4OrAbove()) {

return AvailableRomType.FLYME;

}

if (isAndroidMOrAbove()) {

return AvailableRomType.ANDROID_NATIVE;

}

return AvailableRomType.NA;

}

//Flyme V4的displayId格式为 [Flyme OS 4.x.x.xA]

//Flyme V5的displayId格式为 [Flyme 5.x.x.x beta]

private static boolean isFlymeV4OrAbove() {

String displayId = Build.DISPLAY;

if (!TextUtils.isEmpty(displayId) && displayId.contains("Flyme")) {

String[] displayIdArray = displayId.split(" ");

for (String temp : displayIdArray) {

//版本号4以上,形如4.x.

if (temp.matches("^[4-9]\\.(\\d+\\.)+\\S*")) {

return true;

}

}

}

return false;

}

//Android Api 23以上

private static boolean isAndroidMOrAbove() {

return Build.VERSION.SDK_INT >= Build.VERSION_CODES.M;

}

private static final StringKEY_MIUI_VERSION_CODE ="ro.miui.ui.version.code";

private static boolean isMiUIV6OrAbove() {

try {

final Properties properties =new Properties();

properties.load(new FileInputStream(new File(Environment.getRootDirectory(), "build.prop")));

String uiCode = properties.getProperty(KEY_MIUI_VERSION_CODE, null);

if (uiCode !=null) {

int code = Integer.parseInt(uiCode);

return code >=4;

}else {

return false;

}

}catch (final Exceptione) {

return false;

}

}

static boolean isMiUIV7OrAbove() {

try {

final Properties properties =new Properties();

properties.load(new FileInputStream(new File(Environment.getRootDirectory(), "build.prop")));

String uiCode = properties.getProperty(KEY_MIUI_VERSION_CODE, null);

if (uiCode !=null) {

int code = Integer.parseInt(uiCode);

return code >=5;

}else {

return false;

}

}catch (final Exceptione) {

return false;

}

}

/**

*  修改状态栏文字颜色,这里小米,魅族区别对待。

*/

public static void setLightStatusBar(final Activityactivity, final boolean dark) {

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

switch (StatusBarUtil.getLightStatusBarAvailableRomType()) {

case StatusBarUtil.AvailableRomType.MIUI:

MIUISetStatusBarLightMode(activity, dark);

break;

case StatusBarUtil.AvailableRomType.FLYME:

setFlymeLightStatusBar(activity, dark);

break;

case StatusBarUtil.AvailableRomType.ANDROID_NATIVE:

setAndroidNativeLightStatusBar(activity, dark);

break;

}

}

}

public static boolean MIUISetStatusBarLightMode(Activityactivity, boolean dark) {

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 && StatusBarUtil.isMiUIV7OrAbove()) {

//开发版 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_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);

}

}

}catch (Exceptione) {

}

}

return result;

}

private static boolean setFlymeLightStatusBar(Activityactivity, boolean dark) {

boolean result =false;

if (activity !=null) {

try {

WindowManager.LayoutParams lp =activity.getWindow().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(null);

int value = meizuFlags.getInt(lp);

if (dark) {

value |= bit;

}else {

value &= ~bit;

}

meizuFlags.setInt(lp, value);

activity.getWindow().setAttributes(lp);

result =true;

}catch (Exceptione) {

}

}

return result;

}

public static void setAndroidNativeLightStatusBar(Activityactivity, boolean dark) {

View decor =activity.getWindow().getDecorView();

if (dark) {

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

}else {

decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);

}

}

/**

* 隐藏状态栏

* 发现没啥卵用

* @param activity

*/

@TargetApi(19)

public static void transparencyBar(Activityactivity) {

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

Window window =activity.getWindow();

window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

window.setStatusBarColor(Color.TRANSPARENT);

window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE

| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);

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

Window window =activity.getWindow();

window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,

WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

}

}

/**

* 修改状态栏颜色,支持4.4以上版本

* @param activity

* @param colorId

*/

public static void setStatusBarColor(Activityactivity, int colorId) {

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

Window window =activity.getWindow();

window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

window.setStatusBarColor(activity.getResources().getColor(colorId));

}

}

/**

* 获取状态栏高度

* @param context

* @return

*/

public static int getStatusBarHeight(Contextcontext) {

Class c =null;

Object obj =null;

Field field =null;

int x =0, statusBarHeight =0;

try {

c = Class.forName("com.android.internal.R$dimen");

obj = c.newInstance();

field = c.getField("status_bar_height");

x = Integer.parseInt(field.get(obj).toString());

statusBarHeight =context.getResources().getDimensionPixelSize(x);

}catch (Exceptione1) {

e1.printStackTrace();

}

return statusBarHeight;

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值