向下滚动AppBarLayout并不总是重新进入

时间:2015-11-25 21:49:35

标签: android scroll android-recyclerview material-design android-appbarlayout

我在CoordinatorLayout和RecyclerView中使用AppBarLayout,CollapsingToolbarLayout创建了一个折叠透明搜索栏。将recyclerView显示在appBarLayout后面而不是在appBarLayout之下,这有点麻烦。但是有效。我的问题是,有时,当我向下滚动时,应用栏不会重新进入。我只是在屏幕外隐藏。这是我的布局:

<android.support.design.widget.CoordinatorLayout
    android:id="@+id/main_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    app:expandedTitleMarginBottom="88dp">

<android.support.v7.widget.RecyclerView
    android:id="@+id/services_recycler_view"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    app:behavior_overlapTop="88dp">

</android.support.v7.widget.RecyclerView>

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fitsSystemWindows="true"
        android:background="@color/color_transparent"
        app:elevation="0dp">

    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/collapsing_toolbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_scrollFlags="scroll|enterAlways"
        android:fitsSystemWindows="false">

<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Search Location or Service"
    android:id="@+id/button_search_bar"/>



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

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

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

任何有关解决不重新进入问题的帮助都会很棒。

一个侧面问题,是因为我使用app:behavior_overlapTop="88dp"使recyclerView出现在应用栏后面,整个滚动有点奇怪:它首先滚动appBar,然后滚动回收器视图。欢迎任何更好的解决方案。

编辑: 我意识到AppBar实际上重新进入向下滚动但是看不见(我可以点击它,我就是看不到它)。我想我会分享这个新线索=)

2 个答案:

答案 0 :(得分:0)

这不是答案,我只是想确认你给的是什么,它会是这样的?向上滚动

enter image description here

意味着搜索按钮会出现在顶部?

编辑:

  <android.support.design.widget.CollapsingToolbarLayout
      android:id="@+id/collapsing_toolbar"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:fitsSystemWindows="false"
      app:layout_scrollFlags="scroll|exitUntilCollapsed">

添加exitUntilCollapsed标志。

答案 1 :(得分:0)

经过几个小时的反复试验,我设法找到了解决您问题的方法。您可以将OnScrollListener设置为RecyclerView。在侦听器内部,检查onScrolled的第一项是否在屏幕上。 如果第一项可见,则首先将RecyclerView的可见性更改为AppBarLayout,然后将其直接更改回View.INVISIBLE

您的代码可能看起来像这样(科特琳):

View.VISIBLE

我知道一个事实,那就是它不是很漂亮,但是只要它解决了我不介意的问题。 另外,您还希望改进是否显示override fun onCreate(savedInstanceState : Bundle?) { super.onCreate(savedInstanceState) contentView(R.layout.my_activity) val mAppbar = appbar val mServices_recycler_view = services_recycler_view //... mServices_recycler_view.addOnScrollListener(object : RecyclerView.OnScrollListener() { override fun onScrollStateChanged(recyclerView : RecyclerView, newState : Int) { super.onScrollStateChanged(recyclerView, newState) } override fun onScrolled(recyclerView : RecyclerView, dx : Int, dy : Int) { val layoutManager = LinearLayoutManager::class.java.cast(recyclerView.layoutManager) if(layoutManager.findFirstVisibleItemPosition() == 0) { mAppbar.visibility = View.INVISIBLE mAppbar.visibility = View.VISIBLE } } } 的第一项,以使它不会在每次滚动时触发,即使只有一点点也不会触发。

您在问题中描述的布局不必更改。