android:clipToPadding="true"

android:fitsSystemWindows="true"


添加在父布局XML中

记录状态栏与布局重合,状态栏颜色问题_第1张图片



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

调用方法:

记录状态栏与布局重合,状态栏颜色问题_第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;

    }

}

更多相关文章

  1. 第九节(Activity布局初步二--嵌套布局)
  2. android tabHost布局之一 不继承TabActivity并以布局文件进行布
  3. Android ListView 分类显示(二)多布局显示
  4. Android 获取imei号码,获取手机型号和系统版本号
  5. Android获取Theme的背景颜色
  6. Android 版本更新下载自动安装APK,并解决Android6.0,7.0安装失败
  7. 版本更新简要
  8. android studio 无法在可视化页面预览布局文件

随机推荐

  1. InnoDB瓶颈:放宽ACID以提高性能
  2. Hive安装与部署集成mysql
  3. 0926MySQL中ICP索引下推
  4. 【转载】----CentOS 6.5下安装MySQL 5.6.
  5. 安装mysql5.7解压包中遇见的问题
  6. Linux 下整合Apache+tomcat+mysql
  7. Web分页显示数据
  8. Navicate for MySQL 的一点细节问题
  9. 请求卡在ActiveRecord :: QueryCache中间
  10. MySql-5.5安装包及文档