CoordinatorLayout не скрывает панель инструментов при прокрутке, несмотря на реализацию всех необходимых параметров

Вот моя установка, я запускаю DrawerLayout, внутри него находится CoordinatorLayout, содержащий AppBarLayout и nestedscrollview. Я пытаюсь нормально прокрутить nestedscrollview и скрыть панель инструментов при прокрутке вниз и повторить при прокрутке вверх. В приложении мой код XML. Был бы признателен за любую помощь.. прочитал все связанные вопросы и реализовал свои ответы без какого-либо успеха.

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawer_layout_admin"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.design.widget.CoordinatorLayout
    android:id="@+id/admincoordinator"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appBarLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <include
            android:id="@+id/app_bar"
            layout="@layout/app_bar"
            app:layout_scrollFlags="scroll|enterAlways" />

        <android.support.design.widget.TabLayout
            android:id="@+id/tabLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </android.support.design.widget.AppBarLayout>

    <android.support.v4.widget.NestedScrollView
        android:id="@+id/adminrelScroll"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

</android.support.design.widget.CoordinatorLayout>

<android.support.design.widget.NavigationView
    android:id="@+id/nav_drawer"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    app:headerLayout="@layout/drawer_header"
    app:menu="@menu/menu_drawer" />

3 ответа

У меня была такая же проблема в течение недели, и я пытался решить практически все. Однако мне удалось решить проблему.

Где у вас что-то вроде...

<include
    android:id="@+id/app_bar"
    layout="@layout/app_bar"
    app:layout_scrollFlags="scroll|enterAlways" />

... замените это тем, что есть в вашем app_bar.xml раскладка. Например:

<android.support.v7.widget.Toolbar
    android:id="@+id/main_toolbar"
    style="@style/AppTheme.Toolbar"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    app:layout_scrollFlags="scroll|enterAlways"/>

Кажется, по какой-то причине, прокручивая с CoordinatorLayout не работает при использовании <include> тег.

Как сказал @Farbod Salamat-Zadeh ранее: CoordinatorLayout не работает при использовании <include> тег.
Но вы можете использовать <include> сюда:

<include
    android:id="@+id/app_bar"
    layout="@layout/app_bar" />

параметр app:layout_scrollFlags="scroll|enterAlways" просто должен быть перенесен в ваш app_bar.xml если это приемлемо для вас

Я думаю, что использование нового CollapsingToolbarLayout поможет… Краткое описание из очень полезного исследования новой библиотеки поддержки дизайна Android показывает, как обернуть панель инструментов в CollapsingToolbarLayout и настроить эффекты, установив layout_collapseMode.

Обновить

Я думаю, что добавление onScrollListener в ваш ListView и показ / скрытие панели инструментов, как этот пример из этого ответа:

getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);

listView.setOnScrollListener(new OnScrollListener() {
    int mLastFirstVisibleItem = 0;

    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {   }           

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

        if (view.getId() == listView.getId()) {
            final int currentFirstVisibleItem = listView.getFirstVisiblePosition();

            if (currentFirstVisibleItem > mLastFirstVisibleItem) {
                getSupportActionBar().hide();
            } else if (currentFirstVisibleItem < mLastFirstVisibleItem) {
                getSupportActionBar().show();
            }

            mLastFirstVisibleItem = currentFirstVisibleItem;
        }               
    }
});
Другие вопросы по тегам