13

La mappa si trova in una piattaforma collassare che si trova in un appBarLayout. Nelle versioni 22.2.0 e 22.2.1 della libreria di supporto di progettazione Android, ho potuto scorrere la mappa indipendentemente dal coordinatorLayout ma in 23.0.1, se provo a scorrere attraverso la mappa nell'asse nord/sud, causa il recyclerview per scorrere su/giù. È un bug o esiste un modo per passare gli eventi di tocco dall'appBarLayout al mapFragment?Panning google map in CoordinatorLayout fa sì che il recyclerview scorra nella libreria di supporto per la progettazione Android 23.0.1

<android.support.design.widget.AppBarLayout 
    android:id="@+id/app_bar_layout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:fitsSystemWindows="true"> 

    <android.support.design.widget.CollapsingToolbarLayout 
     android:id="@+id/collapsing_toolbar_layout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:fitsSystemWindows="true" 
     app:contentScrim="?attr/colorPrimary" 
     app:layout_scrollFlags="scroll|enterAlways"> 

     <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> 

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

<android.support.v7.widget.RecyclerView 
    android:id="@+id/recyclerView" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="#44CCFF" 
    app:behavior_overlapTop="184dp" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

<android.support.design.widget.FloatingActionButton 
    android:id="@+id/fab" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="bottom|right" 
    android:layout_margin="16dp" 
    android:src="@drawable/ic_list_white_24dp" 
    app:backgroundTint="#3366FF" 
    app:fabSize="normal" /> 

+1

rimuovere questa app: layout_behavior = "@ string/appbar_scrolling_view_behavior" sul RecyclerView. –

risposta

37

Ho affrontato lo stesso problema e risolto in questo modo.

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); 
+0

Legenda assoluta. Sapevo della nuova funzione DragCallback in v23.1.0 ma non sapevo che dovessi creare un nuovo comportamento AppBarLayout. Grazie mille –

+0

Grazie. questo ha funzionato per me :) – Zlatko

+0

Lo sto usando, ma questo smette di espandere la vista dell'elenco espandibile. – AndreaCi

4

Lo stesso hai chiesto è stato segnalato come un Bug

Dopo che AppBarLayout.Behavior.DragCallback venuto all'esistenza. Questo è stato possibile disabilitare o trascinare gli eventi all'interno del contenitore.

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

Ecco la stessa soluzione, ma in Kotlin:

val appBarLayout = findViewById<AppBarLayout>(R.id.appBar) 
    val params = appBarLayout.layoutParams as CoordinatorLayout.LayoutParams 
    val behavior = AppBarLayout.Behavior() 
    behavior.setDragCallback(object : AppBarLayout.Behavior.DragCallback() { 
     override fun canDrag(appBarLayout: AppBarLayout): Boolean { 
      return false 
     } 
    }) 
    params.behavior = behavior