我正在基于CoordinatorLayout
创建一个视图。该视图包含两个元素:View
中的CollapsingToolbarLayout
和RecyclerView
作为内容。整个内容也包装在SwipleRefreshLayout
中-向上滚动存在问题,但很容易解决(通过OnOffsetChangedListener
中的AppBar
)
我的问题是,CollapsingToolbarLayout中的视图可能比屏幕更高(非常罕见,但可能),因此它必须是可滚动的。
请参见以下示例:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.SwipeRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<android.support.design.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:id="@+id/app_bar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<View android:id="@+id/very_big_height"
android:layout_width="match_parent"
android:background="@color/design_default_color_primary"
android:layout_height="2000dp"/>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/dummy_recycler_view"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</android.support.design.widget.CoordinatorLayout>
</android.support.v4.widget.SwipeRefreshLayout>
蓝色区域的ID为very_big_height
,而白色区域实际上是屏幕上的空白区域,因为我的RecyclerView的高度为wrap_content
,内部没有物品。
我仍然可以通过蓝色区域滚动AppBar,甚至可以将其完全滚动到屏幕外部。而且,如果我过度滚动它,就无法再次看到它。
我的预期行为是: AppBar应该仅滚动到屏幕底部。如果下面没有内容,则不应隐藏。 另外,如果内容适合屏幕,则AppBar不应是可滚动的(我已经建立了在没有内容时禁用滚动的解决方案,但是当AppBar不适合屏幕时,则无法使用滚动条。
感谢您的帮助!
答案 0 :(得分:0)
滚动问题是由父视图SwipetoRefreshLayout
引起的,您的xml
的根视图应该是CoordinatorLayout
。
我不知道使用SwipetoRefreshLayout
的目的是什么,但是如果滚动元素过多,可能会导致滚动体验变差
答案 1 :(得分:0)
第一个CoordinatorLayout无法将滚动事件发送到SwipeRefreshLayout。您可以在ChildCoordinatorLayout
中尝试代码第二,您可以设置RecyclerView匹配父项。