我在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实际上重新进入向下滚动但是看不见(我可以点击它,我就是看不到它)。我想我会分享这个新线索=)
答案 0 :(得分:0)
这不是答案,我只是想确认你给的是什么,它会是这样的?向上滚动
意味着搜索按钮会出现在顶部?
编辑:
<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
}
}
}
的第一项,以使它不会在每次滚动时触发,即使只有一点点也不会触发。
您在问题中描述的布局不必更改。