2

Es ist ein bekannter Fehler, dass das Scrollen dieser Ansicht das Scroll-Verhalten von AppBarLayout beeinträchtigt, wenn ein AppBarLayout eine scrollbare Ansicht enthält.AppBarLayout deaktiviert das Ziehen der ausgewählten Ansicht

Viele Antworten auf SO schlagen folgende Lösung

CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) mAppBarLayout.getLayoutParams(); 
AppBarLayout.Behavior behavior = new AppBarLayout.Behavior(); 
behavior.setDragCallback(new AppBarLayout.Behavior.DragCallback() { 
     @Override 
     public boolean canDrag(AppBarLayout appBarLayout) { 
      return false; 
     } 
}); 
params.setBehavior(behavior); 

Und das funktioniert gut, außer wenn es einen anderen Blick in die AppBarLayout ist das in der Lage sein sollte, die AppBarLayout zu blättern.

Hier ist mein Layout:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:mapbox="http://schemas.android.com/apk/res-auto" 
    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:orientation="vertical" 
    android:fitsSystemWindows="true"> 

    <android.support.design.widget.CollapsingToolbarLayout 
     android:id="@+id/collapsingToolbar" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:fitsSystemWindows="true" 
     app:layout_scrollFlags="scroll|exitUntilCollapsed" 
     app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

     <fragment 
     android:id="@+id/mapFragment" 
     android:name="com.google.android.gms.maps.MapFragment" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_collapseMode="parallax" /> 

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

    <include layout="@layout/custom_layout" 
     android:layout_width="match_parent" 
     android:layout_height="48dp" 
     android:background="?attr/colorAccent"/> 
</android.support.design.widget.AppBarLayout> 

Ich möchte die Karte in der Lage sein zu blättern (dies funktioniert, indem von canDrag falsch zurückkehrt), aber noch in der Lage sein, um das Layout zu kollabieren, wenn die custom_layout Element berührt wird und nach oben bewegt .

Also brauche ich so etwas wie

behavior.setDragCallback(new AppBarLayout.Behavior.DragCallback() { 
      @Override 
      public boolean canDrag(AppBarLayout appBarLayout) { 
       if(mapIsScrolled) 
       return false; 
       else 
       return true; 
      } 
    }); 

Irgendwelche Ideen, wie dies zu erreichen?

+0

Hey, wie hast du dieses Problem gelöst? – Anupriya

Antwort

0

Verschieben dies aus AppBarLayout:

<include layout="@layout/custom_layout" 
    android:layout_width="match_parent" 
    android:layout_height="48dp" 
    android:background="?attr/colorAccent"/> 

Oder wenn Sie wirklich brauchen, dass Ihr Layout im oberen Teil kollabiert ist, dann eine Berührung Zuhörer an das Layout hinzufügen (oder versuchen Zuhörer konzentrieren).

Haben Sie es noch nicht ausprobiert, so müssen Sie möglicherweise einige zusätzliche Tweeks machen.

Verwandte Themen