【问题标题】:DrawerLayout artifact after disable translucent status bar禁用半透明状态栏后的DrawerLayout神器
【发布时间】:2016-07-22 09:48:54
【问题描述】:

先开启半透明状态栏

getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);       
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);  

需要动态禁用后

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);  

禁用后显示奇怪的工件(半透明线),就像图片上的一样

UPDgithub上的示例项目

【问题讨论】:

    标签: android navigation-drawer statusbar


    【解决方案1】:

    经过研究,我找到了解决方案并编写了自定义类

    public class DrawableLayoutFullScreen extends DrawerLayout {
    
        public DrawableLayoutFullScreen(Context context) {
            this(context,null);
        }
    
        public DrawableLayoutFullScreen(Context context, AttributeSet attrs) {
            super(context, attrs);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                setOnApplyWindowInsetsListener((v, insets) -> {
                    final DrawableLayoutFullScreen drawerLayout = (DrawableLayoutFullScreen) v;
                    drawerLayout.setWillNotDraw(insets.getSystemWindowInsetTop() <= 0 && getBackground() == null);
                    drawerLayout.requestLayout();
                    return insets.consumeSystemWindowInsets();
                });
            }
        }
    
        @Override
        public void setFitsSystemWindows(boolean fitSystemWindows) {
            if (fitSystemWindows) {
                setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
            } else {
                setSystemUiVisibility(0);
            }
            super.setFitsSystemWindows(fitSystemWindows);
        }
    }
    

    当调用setFitsSystemWindows(true)DrawableLayoutFullScreen 填充窗口并在状态栏上方绘制。之后需要为子视图设置填充和边距

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-27
      • 2011-02-22
      • 1970-01-01
      • 1970-01-01
      • 2016-04-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多