Как BottomSheetBehavior, AppBarLayout.ScrollingViewBehavior и AppBarLayout.Behavior могут работать вместе в унисон?

В GIF ниже вы увидите, что у меня проблемы с координацией (хе)AppBarLayout, содержащийCollapsingToolbarLayoutиПостоянный BottomSheet таким образом, что они хорошо играют вместе

Цель: Естьсодержание фрагментавидно выше в бирюзовом (# 26999f), оставайтесь наверху, но прокрутите назад, BottomSheet, видимый выше в темно-зеленом(# 12783e), также уважая AppBarLayout и его поведение

Опять же, как вы можете видеть из GIF, я рядом; содержимое фрагмента используетcustom layout_behavior, MyScrollingViewBehavior, который расширяетAppBarLayout.ScrollingViewBehavior

В приведенном ниже фрагменте кода вы увидитеMyScrollingViewBehavior#layoutDependsOn возвращаетсяtrue еслиdependency является примером либоRelativeLayout (BottomSheet в этом примере) или что угодноsuper (AppBarLayout.ScrollingViewBehavior#layoutDependsOn) зависит от

@Override
public boolean layoutDependsOn(CoordinatorLayout parent, View child, View dependency) {
    return dependency instanceof RelativeLayout ||
            super.layoutDependsOn(parent, child, dependency);
}

ВMyScrollingViewBehavior#onDependentViewChanged еслиdependency является примеромRelativeLayoutэто означает, что зависимость - это BottomSheet, дочерний элемент, то есть содержимое фрагмента, перемещается вверх или вниз с помощьюoffsetTopAndBottom чтобы убедиться, что он остается выше BottomSheet

@TargetApi(VERSION_CODES.LOLLIPOP)
@Override
public boolean onDependentViewChanged(CoordinatorLayout parent, View child, View dependency) {
    if (dependency instanceof RelativeLayout) {
        RelativeLayout bottomSheet = (RelativeLayout) parent.findViewById(R.id.bottom_sheet);
        int bottomSheetHeight = (bottomSheet.getTop() - child.getBottom());
        ViewCompat.offsetTopAndBottom(child, bottomSheetHeight);
    }
    super.onDependentViewChanged(parent, child, dependency);
    return false;
}

Полный пример кода можно найтина Github здесь, Кроме того, этот вопрос является продолжением и обнадеживающим улучшениеммой оригинальный вопрос здесь

Ответы на вопрос(0)

Ваш ответ на вопрос