自定义statusbar背景色

比如这样的,很明显视觉效果比较low一些。我们希望statusbar和我们主题的颜色是一致的。所以就要代码修改statusbar的颜色,做到一致的效果

首先我们自定义statusbar背景色,直接贴代码

public class StatusBarCompat { static class BaseImpl { public void setStatusBarColor(@NonNull Activity activity, @ColorInt int statusColor) {} public void translucentStatusBar(@NonNull Activity activity, boolean hideStatusBarBackground) {} public void setStatusBarColorForCollapsingToolbar(@NonNull Activity activity, AppBarLayout appBarLayout, CollapsingToolbarLayout collapsingToolbarLayout, Toolbar toolbar, @ColorInt int statusColor) {} } static final BaseImpl IMPL; static { final int version = android.os.Build.VERSION.SDK_INT; if (version >= Build.VERSION_CODES.LOLLIPOP) { IMPL = new StatusBarCompatLollipop(); } else if (version >= Build.VERSION_CODES.KITKAT) { IMPL = new StatusBarCompatKitKat(); } else { IMPL = new BaseImpl(); } } /** * set statusBarColor * * @param statusColor color * @param alpha 0 - 255 */ public static void setStatusBarColor(@NonNull Activity activity, @ColorInt int statusColor, int alpha) { setStatusBarColor(activity, calculateStatusBarColor(statusColor, alpha)); } public static void setStatusBarColor(@NonNull Activity activity, @ColorInt int statusColor) { IMPL.setStatusBarColor(activity, statusColor); } public static void translucentStatusBar(@NonNull Activity activity) { translucentStatusBar(activity, false); } /** * change to full screen mode * * @param hideStatusBarBackground hide status bar alpha Background when SDK > 21, true if hide it */ public static void translucentStatusBar(@NonNull Activity activity, boolean hideStatusBarBackground) { IMPL.translucentStatusBar(activity, hideStatusBarBackground); } public static void setStatusBarColorForCollapsingToolbar(@NonNull Activity activity, AppBarLayout appBarLayout, CollapsingToolbarLayout collapsingToolbarLayout, Toolbar toolbar, @ColorInt int statusColor) { IMPL.setStatusBarColorForCollapsingToolbar(activity, appBarLayout, collapsingToolbarLayout, toolbar, statusColor); } //Get alpha color static int calculateStatusBarColor(int color, int alpha) { float a = 1 - alpha / 255f; int red = color >> 16 & 0xff; int green = color >> 8 & 0xff; int blue = color & 0xff; red = (int) (red * a + 0.5); green = (int) (green * a + 0.5); blue = (int) (blue * a + 0.5); return 0xff << 24 | red << 16 | green << 8 | blue; } /** * return statusBar's Height in pixels */ public static int getStatusBarHeight(Context context) { //Api level 19以下,系统没有开放status bar的开放权限,返回0 if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { return 0; } int result = 0; int resId = context.getResources().getIdentifier("status_bar_height", "dimen", "android"); if (resId > 0) { result = context.getResources().getDimensionPixelOffset(resId); } return result; } }


public class FitStatusBarHeightView extends View {

    public FitStatusBarHeightView(Context context) {
        super(c
public class StatusBarCompat {

    static class BaseImpl {
        public void setStatusBarColor(@NonNull Activity activity, @ColorInt int statusColor) {}
        public void translucentStatusBar(@NonNull Activity activity, boolean hideStatusBarBackground) {}
        public void setStatusBarColorForCollapsingToolbar(@NonNull Activity activity, AppBarLayout appBarLayout, CollapsingToolbarLayout collapsingToolbarLayout, Toolbar toolbar, @ColorInt int statusColor) {}
    }

    static final BaseImpl IMPL;
    static {
        final int version = android.os.Build.VERSION.SDK_INT;
        if (version >= Build.VERSION_CODES.LOLLIPOP) {
            IMPL = new StatusBarCompatLollipop();
        } else if (version >= Build.VERSION_CODES.KITKAT) {
            IMPL = new StatusBarCompatKitKat();
        } else {
            IMPL = new BaseImpl();
        }
    }

    /**
     * set statusBarColor
     *
     * @param statusColor color
     * @param alpha       0 - 255
     */
    public static void setStatusBarColor(@NonNull Activity activity, @ColorInt int statusColor, int alpha) {
        setStatusBarColor(activity, calculateStatusBarColor(statusColor, alpha));
    }

    public static void setStatusBarColor(@NonNull Activity activity, @ColorInt int statusColor) {
        IMPL.setStatusBarColor(activity, statusColor);
    }

    public static void translucentStatusBar(@NonNull Activity activity) {
        translucentStatusBar(activity, false);
    }

    /**
     * change to full screen mode
     *
     * @param hideStatusBarBackground hide status bar alpha Background when SDK > 21, true if hide it
     */
    public static void translucentStatusBar(@NonNull Activity activity, boolean hideStatusBarBackground) {
        IMPL.translucentStatusBar(activity, hideStatusBarBackground);
    }

    public static void setStatusBarColorForCollapsingToolbar(@NonNull Activity activity, AppBarLayout appBarLayout, CollapsingToolbarLayout collapsingToolbarLayout,
                                                             Toolbar toolbar, @ColorInt int statusColor) {
        IMPL.setStatusBarColorForCollapsingToolbar(activity, appBarLayout, collapsingToolbarLayout, toolbar, statusColor);
    }

    //Get alpha color
    static int calculateStatusBarColor(int color, int alpha) {
        float a = 1 - alpha / 255f;
        int red = color >> 16 & 0xff;
        int green = color >> 8 & 0xff;
        int blue = color & 0xff;
        red = (int) (red * a + 0.5);
        green = (int) (green * a + 0.5);
        blue = (int) (blue * a + 0.5);
        return 0xff << 24 | red << 16 | green << 8 | blue;
    }

    /**
     * return statusBar's Height in pixels
     */
    public static int getStatusBarHeight(Context context) {
        //Api level 19以下,系统没有开放status bar的开放权限,返回0
        if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
            return 0;
        }
        int result = 0;
        int resId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
        if (resId > 0) {
            result = context.getResources().getDimensionPixelOffset(resId);
        }
        return result;
    }

}

ontext); init(); } public FitStatusBarHeightView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public FitStatusBarHeightView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } private void init() { Activity activity = UIUtils.getActivityFromContext(getContext()); if (activity != null) { StatusBarCompat.translucentStatusBar(activity, true); } } @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(StatusBarCompat.getStatusBarHeight(getContext()), MeasureSpec.EXACTLY)); }








 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值