美文网首页
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