【问题标题】:CoordinatorLayout does not hide Toolbar on scrolling despite implementing all required parameters尽管实现了所有必需的参数,但 CoordinatorLayout 不会在滚动时隐藏工具栏
【发布时间】:2015-06-23 15:52:40
【问题描述】:

这是我的设置,我正在运行一个 DrawerLayout,其中包含一个 CoordinatorLayout,其中包含一个 AppBarLayout 和一个嵌套滚动视图。我试图让 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" />

【问题讨论】:

  • 对我来说也是同样的问题,滚动事件根本不起作用。你得到答案了吗?
  • 这里也一样。这很奇怪
  • @All 任何人都找到了解决方案。真让我头疼。
  • 如果您觉得我的回答有用,您能接受吗? ;)

标签: tabs material-design drawerlayout toolbars android-coordinatorlayout


【解决方案1】:

我已经遇到同样的问题一周了,几乎尝试了所有方法来解决它。 但是我设法解决了这个问题。

你有类似...的地方

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

似乎由于某种原因,在使用&lt;include&gt; 标签时无法使用CoordinatorLayout 滚动

【讨论】:

  • 我非常讨厌这就是我一直需要的! XD 谢谢!
【解决方案2】:

我认为使用新的CollapsingToolbarLayout 会有所帮助…… 来自very useful exploration of the new Android Design Support Library 的简短描述显示了如何将工具栏包装在 CollapsingToolbarLayout 中并通过设置 layout_collapseMode 自定义效果。

更新

我想在您的 ListView 中添加一个 onScrollListener 并显示/隐藏工具栏,就像来自 this answer 的示例一样:

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;
        }               
    }
});

【讨论】:

  • 对于您有一个(额外的?)大型工具栏在滚动时恢复到正常大小的情况下,它不是折叠工具栏布局,我想要实现的是简单地隐藏正常大小的工具栏在滚动..希望这让我的问题清楚:)
【解决方案3】:

正如@Farbod Salamat-Zadehwas 之前所说:CoordinatorLayout 在使用&lt;include&gt; 标签时不起作用。
但是你可以这样使用&lt;include&gt;

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

如果您可以接受参数app:layout_scrollFlags="scroll|enterAlways",则应将其移至您的app_bar.xml

【讨论】:

    猜你喜欢
    • 2017-06-28
    • 2015-12-16
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多