解决多个view同时使用fitSystemWindws时,只有第

2017-04-19  本文已影响60人  sunny_ke_ke
如果多个view同时设置了fitsSystemWindows,只有第一个会起作用

解决办法:

/**
     * 使所有子view的FitWindowSystem属性生效
     *
     * @param parents 父容器
     * @param childs  需要生效FitWindowSystem属性的子view
     */
    public static void validChildsFitWindowSystemProperty(View parents, final View... childs) {
        ViewCompat.setOnApplyWindowInsetsListener(parents, new OnApplyWindowInsetsListener() {
            @Override
            public WindowInsetsCompat onApplyWindowInsets(View v, WindowInsetsCompat insets) {
                insets = ViewCompat.onApplyWindowInsets(v, insets);
                if (insets.isConsumed()) {
                    //父类已经设置,子类不再需要设置FitWindowSystem
                    return insets;
                }
                boolean consumed = false;

                for (View child : childs) {
                    ViewCompat.dispatchApplyWindowInsets(child, insets);
                    if (insets.isConsumed()) {
                        consumed = true;
                    }
                }
                return consumed ? insets.consumeSystemWindowInsets() : insets;
            }
        });
    }

参考:令人困惑的fitsSystemWindows属性 - 简书

上一篇下一篇

猜你喜欢

热点阅读