記錄狀態(tài)欄與布局重合斥难,狀態(tài)欄顏色問題

android:clipToPadding="true"

android:fitsSystemWindows="true"


添加在父布局XML中



2.改變狀態(tài)欄顏色與背景顏色值??

調(diào)用方法:



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

//開發(fā)版 7.7.13 及以后版本采用了系統(tǒng)API,舊方法無效但不會報(bào)錯

? ? ? ? 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;

? ? ? ? }

}

/**

*? 修改狀態(tài)欄文字顏色哑诊,這里小米,魅族區(qū)別對待及刻。

*/

? ? 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);//狀態(tài)欄透明且黑色字體

? ? ? ? ? ? ? ? }else {

extraFlagField.invoke(window, 0, darkModeFlag);//清除黑色字體

? ? ? ? ? ? ? ? }

result =true;

? ? ? ? ? ? ? ? if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && StatusBarUtil.isMiUIV7OrAbove()) {

//開發(fā)版 7.7.13 及以后版本采用了系統(tǒng)API镀裤,舊方法無效但不會報(bào)錯,所以兩個方式都要加上

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

? ? ? ? }

}

/**

* 隱藏狀態(tài)欄

* 發(fā)現(xiàn)沒啥卵用

? ? * @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);

? ? ? ? }

}

/**

* 修改狀態(tài)欄顏色缴饭,支持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));

? ? ? ? }

}

/**

* 獲取狀態(tài)欄高度

? ? * @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;

? ? }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末暑劝,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子颗搂,更是在濱河造成了極大的恐慌担猛,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丢氢,死亡現(xiàn)場離奇詭異傅联,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)疚察,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進(jìn)店門蒸走,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人貌嫡,你說我怎么就攤上這事比驻「盟荩” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵别惦,是天一觀的道長狈茉。 經(jīng)常有香客問我,道長掸掸,這世上最難降的妖魔是什么氯庆? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮猾漫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘感凤。我一直安慰自己悯周,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布陪竿。 她就那樣靜靜地躺著禽翼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪族跛。 梳的紋絲不亂的頭發(fā)上闰挡,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天,我揣著相機(jī)與錄音礁哄,去河邊找鬼长酗。 笑死,一個胖子當(dāng)著我的面吹牛桐绒,可吹牛的內(nèi)容都是我干的夺脾。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼茉继,長吁一口氣:“原來是場噩夢啊……” “哼咧叭!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起烁竭,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤菲茬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后派撕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體婉弹,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年终吼,在試婚紗的時候發(fā)現(xiàn)自己被綠了马胧。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡衔峰,死狀恐怖佩脊,靈堂內(nèi)的尸體忽然破棺而出蛙粘,到底是詐尸還是另有隱情,我是刑警寧澤威彰,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布出牧,位于F島的核電站,受9級特大地震影響歇盼,放射性物質(zhì)發(fā)生泄漏舔痕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一豹缀、第九天 我趴在偏房一處隱蔽的房頂上張望伯复。 院中可真熱鬧,春花似錦邢笙、人聲如沸啸如。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽叮雳。三九已至,卻和暖如春妇汗,著一層夾襖步出監(jiān)牢的瞬間帘不,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工杨箭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留寞焙,地道東北人。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓互婿,卻偏偏與公主長得像棺弊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子擒悬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評論 2 355