美文网首页
Android 沉浸式状态栏 (适配 4.4 以上)

Android 沉浸式状态栏 (适配 4.4 以上)

作者: __Y_Q | 来源:发表于2020-09-05 15:51 被阅读0次
  • 工具类 StatusBarUtils, 包含了全屏设置和设置状态栏的颜色. 使用全面屏的时候, 需要在 styles.xml 文件中的样式设置为 NoActionBar.
public class StatusBarUtils {

    //为 Activity 的状态栏设置颜色.
    @SuppressLint("ObsoleteSdkInt")
    public static void setStatusBarColor(Activity activity, int color) {
        //处理 5.0以上
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            //直接调用系统自带的
            activity.getWindow().setStatusBarColor(color);
        }
        //处理 4.4 - 5.0, 没办法调用上面的方法, 需要用一个技巧
        //先设置为全屏, 然后在状态栏的位置加一个布局, 代替状态栏.
        else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            //先设置为全屏透明
            activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            //创建自己的 statusBar
            View view = new View(activity);
            view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight(activity)));
            view.setBackgroundColor(color);
            //将我们创建的statusBar 赋值给 viewGroup
            ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();
            decorView.addView(view, 0);

            //拿到 根布局中的 contentView
            ViewGroup contentView = activity.findViewById(android.R.id.content);
            //获取到我们 set 进去的布局
            View activityView = contentView.getChildAt(0);
            //设置属性
            activityView.setFitsSystemWindows(true);

        }
    }

    private static int getStatusBarHeight(Activity activity) {
        Resources rs = activity.getResources();
        //获取资源ID
        int statusBarHeightId = rs.getIdentifier("status_bar_height", "dimen", "android");
        //再根据ID 获取资源
        return rs.getDimensionPixelOffset(statusBarHeightId);
    }

    /**
     * 设置 Activity 全屏
     *
     * @param activity
     */
    public static void setActivityTranslucent(Activity activity) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            View decorView = activity.getWindow().getDecorView();
            decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
            activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        }
    }
}

使用方式在 BaseActivity 中的 onCreate 方法内调用即可

相关文章

网友评论

      本文标题:Android 沉浸式状态栏 (适配 4.4 以上)

      本文链接:https://www.haomeiwen.com/subject/wvkfektx.html