Я создаю приложение для Android и хочу скрыть BottomAppBar
(на нем закреплен ярлык в центре) всякий раз, когда я прокручиваю RecyclerView
, который находится внутри фрагмента моей деятельности, без изменения макета BottomAppBar
.
Следуя некоторым интерактивным руководствам, я создал свой собственный класс, который расширяет CoordinatorLayout.Behavior
и переопределяет onStartNestedScroll
& onNestedPreScroll
, так что BottomAppBar
скрывается при каждой прокрутке.
<android.support.design.widget.CoordinatorLayout ...>
...
<android.support.design.bottomappbar.BottomAppBar
style="@style/Widget.MaterialComponents.BottomAppBar"
android:id="@+id/bottom_app_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
app:backgroundTint="@color/colorPrimary"
app:fabAlignmentMode="center"
app:fabCradleRoundedCornerRadius="15dp"/>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_add_white_24dp"
app:layout_anchor="@id/bottom_app_bar" />
</android.support.design.widget.CoordinatorLayout>
BottomAppBar bab = (BottomAppBar) findViewById(R.id.bottom_app_bar);
CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) bab.getLayoutParams();
BottomNavigationBehavior bnb = new BottomNavigationBehavior();
layoutParams.setBehavior(bnb);
class BottomNavigationBehavior<V extends View> extends CoordinatorLayout.Behavior<V>{
@Override
public boolean onStartNestedScroll(@NonNull CoordinatorLayout coordinatorLayout, @NonNull V child, @NonNull View directTargetChild, @NonNull View target, int axes, int type) {
return axes == ViewCompat.SCROLL_AXIS_VERTICAL;
}
@Override
public void onNestedPreScroll(@NonNull CoordinatorLayout coordinatorLayout, @NonNull V child, @NonNull View target, int dx, int dy, @NonNull int[] consumed, int type) {
super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed, type);
child.setTranslationY(Math.max(0f, Math.min(child.getHeight(),child.getTranslationY() + dy)));
}
}
Без пользовательского класса это (желаемый) результат (но поведение скрытия при прокрутке явно не работает)
Спользовательский класс, это (нежелательный) результат (но поведение скрытия прокрутки работает)
Я подумал, что, поскольку я не изменяю параметры layoutParams
, нотолько поведение макета должно быть таким же, но, очевидно, что-то мне не хватает ...
Кто-нибудь знает, как это исправить?