CoordinatorLayout尽管实现了所有必需的参数,但在滚动时仍未隐藏工具栏

7
这是我的设置,我正在运行一个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" />


我也遇到了同样的问题,滚动事件根本不起作用。你找到答案了吗? - Naruto
同样在这里。这很奇怪。 - ThanosFisherman
@所有人,有人找到解决方法了吗?这个问题真的让我头疼。 - Rethinavel
如果您觉得我的回答有用,能否接受它呢?;) - Farbod Salamat-Zadeh
3个回答

5

我遇到了同样的问题已经一周了,尝试了几乎所有的解决方案。然而,我最终解决了这个问题。

当你遇到像下面这样的情况时...

<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"/>

似乎由于某些原因,在使用<include>标签时,使用CoordinatorLayout进行滚动不起作用


我太讨厌了,这就是我整个时间所需要的全部!!XD 谢谢! - leenephi

1
我认为利用新的CollapsingToolbarLayout将会有所帮助... 从非常有用的探索新Android设计支持库的简短描述中可以看出,如何在CollapsingToolbarLayout中包装工具栏并通过设置layout_collapseMode来自定义效果。 更新 我认为为您的ListView添加onScrollListener并像这个答案中的示例一样显示/隐藏工具栏将会很有帮助。
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;
        }               
    }
});

不是折叠式工具栏布局适用于具有(额外的?)大工具栏并在滚动时恢复到正常大小的情况,我想要实现的是在滚动时简单地隐藏正常大小的工具栏.. 希望我的问题表述清楚 :) - Shrikant Bhaskar

1
正如@Farbod Salamat-Zadehwas之前所说:CoordinatorLayout在使用<include>标记时无法工作。
但您可以以这种方式使用<include>
<include
    android:id="@+id/app_bar"
    layout="@layout/app_bar" />

若您认为可接受,app:layout_scrollFlags="scroll|enterAlways" 参数应被移至您的 app_bar.xml

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接