android:clipToPadding="true"

android:fitsSystemWindows="true"

添加在父布局XML中

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

调用方法:

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;

}

}

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

  1. 刘海屏全屏显示(主要是隐藏状态栏且布局在状态栏位置上生效)

    我的手机是红米Note 9 刘海屏,其他刘海屏不一定有用,但不妨试一试 其实非刘海屏的话,只需要在清单文件对应的activity下指定一个自定义的theme,theme的内容为以下内容即可 <s ...

  2. Android布局延伸状态栏,Android沉浸式全屏讲解(状态栏、导航栏处理)

    Android应用中经常会有一些要求全屏显隐状态栏导航栏的需求.通过全屏沉浸式的处理可以让应用达到更好的显示效果.下面系统的讲解一下有关全屏,隐藏状态栏导航栏,沉浸式的知识. 在Android4.1之 ...

  3. android布局黑色字体颜色,Android 沉浸式状态栏-字体颜色与背景颜色修改实现与兼容...

    沉浸式状态栏究其根本就是将布局内容延伸到状态栏中,让状态栏覆盖在布局上或者隐藏. 实现 首先,要修改状态栏android版本至少要在4.4以上,并且在4.4是不能让状态栏透明的,只能达到一种半透明的阴 ...

  4. Android延伸布局到状态栏,Android 状态栏透明

    前言:最近项目大量用到状态栏透明,网上也出现很多库可以直接拿来用,个人认为没有必要那么重引用到一个库(有木有同学和我有一样的想法),所以研究了一番,在此做个记录加强记忆也便后期查阅,如果无意中有幸能帮 ...

  5. Android 手机状态栏变透明以及更换颜色

    我直接封装好了一个工具类,可以直接透明,或者自定义颜色,直 接调用就可以,具体的调用方法卸载后面,共需要三个工具类我全部贴在下面 一.工具类1(  EyesKitKat  ) @TargetApi(B ...

  6. android实现系统状态栏的隐藏方法,Android隐藏系统状态栏(沉浸式状态栏)和设置状态栏颜色...

    Android 5.0(API 21)之后就可以对系统状态栏进行设置了,这里我不是想深入讨论对系统状态栏的一些高级设置,因为一般也用不到,我只想说最常见的两种场景 隐藏系统状态栏,这就是感觉很牛逼的沉 ...

  7. Android——设置布局的背景颜色

    //设置布局的背景颜色 linearLayout.setBackgroundColor(getResources().getColor(R.color.color_blue)); 要求版本API 16

  8. Android沉浸式状态栏(透明系统状态栏)

    Android沉浸式状态栏(透明系统状态栏)的目的:顶部系统状态栏和App的导航栏一体化,不给用户突兀的感觉,使用户把更多的视角留在我们的App上. 沉浸式状态栏的兼容情况 Android版本 透明状 ...

  9. 【Android 性能优化】布局渲染优化 ( 过渡绘制 | 背景设置产生的过度绘制 | Android 系统的渲染优化 | 自定义布局渲染优化 )

    文章目录 一. 背景设置产生的过度绘制 二. Android 系统的渲染优化 1. 透明组件数据传递 2. GPU 存储机制 3. Android 7.0 之后的优化机制 三. 自定义布局渲染优化 一 ...

最新文章

  1. 网络营销外包专员浅析从用户角度出发如何完善网络营销外包?
  2. Requests方法 -- 关联用例执行
  3. 快速排序的三种实现方法
  4. 区块链在阿里巴巴天猫中的应用
  5. java rhino_在Java 8中使用Rhino
  6. Python--进程、线程、协程对比
  7. 物理搬砖问题_全职业通用,搬砖市场装备
  8. js 字符串插入_前端利器React,为什么推荐JSX来替换JS
  9. vue element Form-Item prop
  10. 20190804:有效的括号(误删补发)
  11. 【转】char,wchar_t,WCHAR,TCHAR,ACHAR的区别
  12. 斐波那契数列(剑指offer)
  13. 数据结构和算法(C语言版)期末速成基础不挂科补考
  14. dcs world f15c教学_烟台TSXP57353M【四点零自动化】DCS系统
  15. 微信公众号注册认证流程
  16. 【环境搭建】zip 分卷压缩
  17. HTML5期末大作业:生态环境网站设计——环境保护主题-绿色环保 (9页) web期末作业设计网页_绿色环保大学生网页设计作业成品
  18. mysql删除表中数据
  19. PC客户端软件的安装和卸载测试知识点
  20. LeetCode 刷题系列(前缀和题目)之 974. 和可被 K 整除的子数组

热门文章

  1. 树莓派(Raspberry Pi)如何修改成中文
  2. masm 汇编工具介绍
  3. AI笔记: 数学基础之角的概念和三角常用公式推导
  4. 俩个有序顺序表的合并(好好学习)
  5. JavaFX: 布局
  6. 【微积分】2.3多元函数微分
  7. Unity基础 3.3 2D物理系统 :刚体
  8. 如何选出好的导热材料-关键参数指
  9. WPF 基础到企业应用系列5——WPF千年轮回 续前缘
  10. 对于天海投资未来发展,海航陈峰运筹帷幄