Как 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 здесь, Кроме того, этот вопрос является продолжением и обнадеживающим улучшениеммой оригинальный вопрос здесь