Android状态栏字体颜色

作者 : 开心源码 本文共5483个字,预计阅读时间需要14分钟 发布时间: 2022-05-12 共178人阅读

build.gradle增加第三方库

dependencies {  //状态栏    implementation 'com.readystatesoftware.systembartint:systembartint:1.0.3'}

状态栏工具类

import android.annotation.TargetApi;import android.app.Activity;import android.graphics.Color;import android.os.Build;import android.view.View;import android.view.Window;import android.view.WindowManager;import com.readystatesoftware.systembartint.SystemBarTintManager;import java.lang.reflect.Field;import java.lang.reflect.Method;/** * 状态栏工具类 * author:wiki on 2018/11/16 * email:zhengweiqunemail@qq.com */public class StatusBarUtil {    /**     * 修改状态栏为全透明     *     * @param activity     */    @TargetApi(19)    public static void transparencyBar(Activity activity) {        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {            Window window = activity.getWindow();            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);            window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);            window.setStatusBarColor(Color.TRANSPARENT);        } 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(Activity activity, int colorId) {        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {            Window window = activity.getWindow();//      window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);            window.setStatusBarColor(activity.getResources().getColor(colorId));        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {            //使用SystemBarTint库使4.4版本状态栏变色,需要先将状态栏设置为透明            transparencyBar(activity);            SystemBarTintManager tintManager = new SystemBarTintManager(activity);            tintManager.setStatusBarTintEnabled(true);            tintManager.setStatusBarTintResource(colorId);        }    }    /**     * 状态栏亮色模式,设置状态栏黑色文字、图标,     * 适配4.4以上版本MIUIV、Flyme和6.0以上版本其余Android     *     * @param activity     * @return 1:MIUUI 2:Flyme 3:android6.0     */    public static int StatusBarLightMode(Activity activity) {        int result = 0;        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {            if (MIUISetStatusBarLightMode(activity, true)) {                result = 1;            } else if (FlymeSetStatusBarLightMode(activity.getWindow(), true)) {                result = 2;            } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {                activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);                result = 3;            }        }        return result;    }    /**     * 已知系统类型时,设置状态栏黑色文字、图标。     * 适配4.4以上版本MIUIV、Flyme和6.0以上版本其余Android     *     * @param activity     * @param type     1:MIUUI 2:Flyme 3:android6.0     */    public static void StatusBarLightMode(Activity activity, int type) {        if (type == 1) {            MIUISetStatusBarLightMode(activity, true);        } else if (type == 2) {            FlymeSetStatusBarLightMode(activity.getWindow(), true);        } else if (type == 3) {            activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);        }    }    /**     * 状态栏暗色模式,清理MIUI、flyme或者6.0以上版本状态栏黑色文字、图标     */    public static void StatusBarDarkMode(Activity activity, int type) {        if (type == 1) {            MIUISetStatusBarLightMode(activity, false);        } else if (type == 2) {            FlymeSetStatusBarLightMode(activity.getWindow(), false);        } else if (type == 3) {            activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);        }    }    /**     * 设置状态栏图标为深色和魅族特定的文字风格     * 可以用来判断能否为Flyme客户     *     * @param window 需要设置的窗口     * @param dark   能否把状态栏文字及图标颜色设置为深色     * @return boolean 成功执行返回true     */    public static boolean FlymeSetStatusBarLightMode(Window window, boolean dark) {        boolean result = false;        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(null);                int value = meizuFlags.getInt(lp);                if (dark) {                    value |= bit;                } else {                    value &= ~bit;                }                meizuFlags.setInt(lp, value);                window.setAttributes(lp);                result = true;            } catch (Exception e) {            }        }        return result;    }    /**     * 需要MIUIV6以上     *     * @param activity     * @param dark     能否把状态栏文字及图标颜色设置为深色     * @return boolean 成功执行返回true     */    public static boolean MIUISetStatusBarLightMode(Activity activity, 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) {                    //开发版 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_VISIBLE);                    }                }            } catch (Exception e) {            }        }        return result;    }}
在布局文件,父布局中增加属性android:fitsSystemWindows
android:fitsSystemWindows="true"
在基类BaseActivitiy中使用

StatusBarUtil.StatusBarLightMode(this);

/** * author:wiki on 2018/11/9 * email:zhengweiqunemail@qq.com */public abstract class BaseActivity extends AppCompatActivity {    @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);        StatusBarUtil.StatusBarLightMode(this);        initView();    }}

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Android状态栏字体颜色

发表回复