到目前为止,我所测试过的:
当我使用一个NestedScrollView作为主容器,并将TextView作为子容器时,AppBarLayout可以正常工作且不会滚动。
然而,当我使用一个仅有几项条目并具有“wrap_content”属性(因此没有滚动需求)的RecyclerView时,即使RecyclerView从未接收到滚动事件(使用OnScrollChangeListener测试),AppBarLayout中的工具栏也是可滚动的。
这是我的布局代码:
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/coordinatorLayout"
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">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:layout_scrollFlags="scroll|enterAlways"
app:theme="@style/ToolbarStyle" />
</android.support.design.widget.AppBarLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>
以下是翻译结�,仅供�考:
å°½ç®¡æ— éœ€æ»šåŠ¨ï¼Œä½†å·¥å…·æ �å�¯æ»šåŠ¨çš„效æ�œå¦‚下:
我也找到了一�处�方法,�检查所有RecyclerView项目是���,并使用RecyclerView的setNestedScrollingEnabled()方法。 �过,对我�说似�更�是一个错误。 有什么���? 😄
编辑#1:
对äº�å�¯èƒ½å¯¹æˆ‘当å‰�解决方案感兴趣的人,请注æ„�,由äº�LayoutManager始终在调用用äº�查找第一个和最å��一个项是å�¦å�¯è§�的方法时返å›�-1,我必须将setNestedScrollingEnabled()逻辑放在5ms延迟的Handlerçš„postDelayed()方法ä¸ã€‚
我在RecyclerViewåˆ�始化å��çš„onStart()方法ä¸ä½¿ç”¨æ¤ä»£ç �,并且æ¯�当RecyclerView的内容更改å��都会使用该代ç �。
final LinearLayoutManager layoutManager = (LinearLayoutManager) mRecyclerView.getLayoutManager();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
//no items in the RecyclerView
if (mRecyclerView.getAdapter().getItemCount() == 0)
mRecyclerView.setNestedScrollingEnabled(false);
//if the first and the last item is visible
else if (layoutManager.findFirstCompletelyVisibleItemPosition() == 0
&& layoutManager.findLastCompletelyVisibleItemPosition() == mRecyclerView.getAdapter().getItemCount() - 1)
mRecyclerView.setNestedScrollingEnabled(false);
else
mRecyclerView.setNestedScrollingEnabled(true);
}
}, 5);
编辑 #2:
我刚刚试用了一个新应用程序,发现这种(意外的)行为已经在支持库版本23.3.0(甚至更早)中得到修复。因此,不再需要使用解决方法了!