android hint字体颜色_Android沉浸式简单实现(暂未测试全部机型,根据资料修改,模拟器,小米6,,荣耀做了简单测试)...

StatusBarUtil.java - 有问题再完善。如果遇到某些机型有问题,可以真针对性做分析去完善兼容性,这就是三方沉浸式的好处!目前不考虑5.0一下的机型了吧。。都可以直接上6.0+了。。基本Android10年底应该能普及了,11目前模拟器都可以用了。。。

package com.hl.base_module.util;

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.hl.base_module.R;

public class StatusBarUtil {
    /**
     * 设置状态栏颜色
     */
    public static void initColor(Activity activity, String statusColor) {
        setColor(activity, statusColor, true);
    }

    /**
     * 设置默认白色
     *
     * @param activity
     */
    public static void initAppColor(Activity activity) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            setColor(activity, activity.getResources().getColor(R.color.app_main_activatedcolor, null), true);
        } else {
            setColor(activity, activity.getResources().getColor(R.color.app_main_activatedcolor), true);
        }
    }

    /**
     * 设置默认白色
     *
     * @param activity
     */
    public static void initWhiteLight(Activity activity) {
        setColor(activity, null, true);
    }

    /**
     * 设置默认黑色
     *
     * @param activity
     */
    public static void initBlackLight(Activity activity) {
        setColor(activity, null, false);
    }

    /**
     * 辅助方法
     *
     * @param activity
     * @param statusColor
     * @param bWhite
     */
    private static void setColor(Activity activity, Object statusColor, boolean bWhite) {
        Window window = activity.getWindow();

        if (null != statusColor) {
            // 注意要清除 FLAG_TRANSLUCENT_STATUS flag
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            // 需要设置这个 flag 才能调用 setStatusBarColor 来设置状态栏颜色 - Window负责系统bar的background 绘制
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

            if (statusColor instanceof String) {
                String colors = (String) statusColor;
                window.setStatusBarColor(Color.parseColor(colors));
            } else if (statusColor instanceof Integer) {
                window.setStatusBarColor((Integer) statusColor);
            }
        } else {
            if (bWhite) {
                //设置状态栏字体颜色为白色
                window.getDecorView().setSystemUiVisibility(
                                View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
                                View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
                                View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
            } else {
                //设置状态栏字体颜色为黑色
                window.getDecorView().setSystemUiVisibility(
                                View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
                                View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
                                View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
            }

            //设置状态栏颜色为透明
            window.setStatusBarColor(Color.TRANSPARENT);
            //设置导航键颜色也为透明
            window.setNavigationBarColor(Color.TRANSPARENT);
        }
    }

    /**
     * 获取状态栏高度
     *
     * @param activity 需要设置的activity
     * @return 状态栏矩形条
     */
    public static int getStatusHeight(Activity activity) {
        // 获得状态栏高度
        int resourceId = activity.getResources().getIdentifier("status_bar_height", "dimen", "android");
        int statusBarHeight = activity.getResources().getDimensionPixelSize(resourceId);
        return statusBarHeight;
    }
}

使用:可以封装到base页面,提供开关方便开启:

v2-6c3d4e4c5e49b2fa0662e96cd998879c_b.jpg

也可以直接设置颜色,那样的画就不是完全的沉浸式了...

v2-4572df54a93b7579ac6af83653b2746d_b.png

效果如下:

v2-f946e526649bc92a8b8cf52b36e720c6_b.jpg

v2-87b61aa3d634d6825aa24d5af29b7fb5_b.jpg

v2-a0e1e203e378056e404ae79ee51b6e3f_b.jpg

v2-d5bc52b98e1fdbd84e71129fb9891fb3_b.jpg

这是三方的换一个沉浸式工具类库,可以参考,实际并没有完全我想要的效果,应该是文章不是特别全。库本身估计没啥问题...Android关于沉浸式状态栏的一些总结

工程集成地址: NetNut/MVVM_组件化+LiveData+ViewModel+Repository--Jetpack--AS3.6.1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值