Можно ли свернуть несколько представлений в AppBarLayout? - PullRequest
1 голос
/ 06 октября 2019

У меня есть AppBarLayout с CollapsingToolbarLayout, двумя представлениями ниже и ViewPager на остальной части экрана

<Coordinator>

    <AppBarLayout>
        // Toolbar stuff inside
        <CollapsingToolbarLayout app:layout_scrollFlags="scroll|exitUntilCollapsed"/>

        // Should collapse by design
        <FirstButtonView app:layout_scrollFlags="scroll" />

        <TabLayout app:layout_scrollFlags="scroll|exitUntilCollapsed">

    </AppBarLayout>

    <ViewPager app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

</Coordinator>

С этим макетом, как и ожидалось, свернутая панель инструментов, но оба представления закреплены наверху

Как я вижу в классе AppBarLayout, когда он вычисляет возможную прокрутку, он перебирает дочерние представления, пока не встретится флаг SCROLL_FLAG_EXIT_UNTIL_COLLAPSED = 2, а затем прерывает цикл

public final int getTotalScrollRange() {
        if (this.totalScrollRange != -1) {
            return this.totalScrollRange;
        } else {
            int range = 0;
            int i = 0;

            for(int z = this.getChildCount(); i < z; ++i) {
                View child = this.getChildAt(i);
                AppBarLayout.LayoutParams lp = (AppBarLayout.LayoutParams)child.getLayoutParams();
                int childHeight = child.getMeasuredHeight();
                int flags = lp.scrollFlags;
                if ((flags & 1) == 0) {
                    break;
                }

                range += childHeight + lp.topMargin + lp.bottomMargin;
                if ((flags & 2) != 0) {
                    range -= ViewCompat.getMinimumHeight(child);
                    break;
                }
            }

            return this.totalScrollRange = Math.max(0, range - this.getTopInset());
        }
    }

Возможно ли как-то это решить? Целевой дизайн

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...