我有AppBarLayout中具有视差效果的MapFragment:
我想在AppBarLayout上禁用滚动,因为不可能在地图上移动,因为地图上的触摸偶数总是作为滚动事件处理.
我想通过仅滚动RecyclerView(位于屏幕底部)来处理AppBarLayout的折叠.
这是我的xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.AppBarLayout android:id="@+id/appbar" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsing_toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:fitsSystemWindows="true" app:contentScrim="@color/white" app:expandedTitleMarginEnd="64dp" app:expandedTitleMarginStart="48dp" app:layout_scrollFlags="scroll|exitUntilCollapsed|snap" app:titleEnabled="false"> <FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_collapseMode="parallax" android:fitsSystemWindows="true"> <fragment android:id="@+id/map" android:name="com.androidmapsextensions.SupportMapFragment" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="73dp" app:contentInsetLeft="0dp" app:contentInsetStart="0dp" app:layout_collapseMode="pin" app:popupTheme="@style/ThemeOverlay.AppCompat.Light"> <include android:id="@+id/search_bar" layout="@layout/layout_searchbar" /> </android.support.v7.widget.Toolbar> <View android:id="@+id/toolbar_shadow" android:layout_width="match_parent" android:layout_height="3dp" android:layout_below="@id/search_bar" android:layout_gravity="bottom" android:background="@drawable/toolbar_dropshadow" android:visibility="gone" /> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> <RecyclerView android:id="@+id/farm_list" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/transparent" app:layout_behavior="@string/appbar_scrolling_view_behavior" />
感谢您的答复.
解决方法
我不知道我有没有,但我想你正在寻找一个DragCallback.
DragCallback界面允许选择是否通过滚动到AppBarLayout来控制兄弟滚动视图.
您可以通过调用来定义一个:
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams(); AppBarLayout.Behavior behavior = (AppBarLayout.Behavior) params.getBehavior(); behavior.setDragCallback(new AppBarLayout.Behavior.DragCallback() { @Override public boolean canDrag(@NonNull AppBarLayout appBarLayout) { return false; } });
通常总是返回false,您的滚动视图将不再被ABL控制.
注意:在调用它之前,应该检查ViewCompat.isLaidOut(appBarLayout),否则params.getBehavior()将返回null.