android – Cheesesquare:enterAlways产生错误的布局

前端之家收集整理的这篇文章主要介绍了android – Cheesesquare:enterAlways产生错误的布局前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

将enterAlways添加到Cheesesquare演示的滚动标志:

导致错误的布局:

enter image description here

在向下滚动期间,标题正确进入,但它不会停在正确的位置.滚动进一步取代零件:背景图像显示错误的位置,工具栏因背景颜色的变化而变得不可见. (我还在这里为工具栏添加了一个colorPrimary背景,使其更加明显,但问题当然不依赖于颜色).这些库是截至今天的最新版本,23.1.0.

是否有任何解决方法或我们必须等待它在库中修复?现在,它似乎是任何需要此功能的应用程序的showstopper.

enterAlwaysCollapsed工作,但它提供了不同的功能,它不是一种解决方法.

最佳答案
我通过对AppBarLayout类源代码进行了一些修补来解决了这个问题.显然他们并不认为人们会这样使用它.或者他们做了,我离开了.无论如何它对我有用.

您需要对此方法进行一些小改动.寻找SCROLL_FLAG_EXIT_UNTIL_COLLAPSED

 /**
 * Return the scroll range when scrolling down from a nested pre-scroll.
 */
private int getDownNestedPreScrollRange() {
    if (mDownPreScrollRange != INVALID_SCROLL_RANGE) {
        // If we already have a valid value,return it
        return mDownPreScrollRange;
    }

    int range = 0;
    for (int i = getChildCount() - 1; i >= 0; i--) {
        final View child = getChildAt(i);
        final LayoutParams lp = (LayoutParams) child.getLayoutParams();
        final int childHeight = child.getMeasuredHeight();
        final int flags = lp.mScrollFlags;

        if ((flags & LayoutParams.FLAG_QUICK_RETURN) == LayoutParams.FLAG_QUICK_RETURN) {
            // First take the margin into account
            range += lp.topMargin + lp.bottomMargin;
            // The view has the quick return flag combination...
            if ((flags & LayoutParams.SCROLL_FLAG_ENTER_ALWAYS_COLLAPSED) != 0) {
                // If they're set to enter collapsed,use the minimum height
                range += ViewCompat.getMinimumHeight(child);
                // This is what is missing...
            } else if ((flags & LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED) == LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED) {
                range += childHeight - ViewCompat.getMinimumHeight(child);
            } else {
                // Else use the full height
                range += childHeight;
            }
        } else if (range > 0) {
            // If we've hit an non-quick return scrollable view,and we've already hit a
            // quick return view,return now
            break;
        }
    }
    return mDownPreScrollRange = range;
}

如果使用,可能需要递减状态栏高度
 “机器人:fitsSystemWindows =” 真”.

希望能帮助到你.您需要从设计库中复制一些类以允许所有导入和输入.一些将公开的方法.

干杯.

猜你在找的Android相关文章