2

Während meines letzten Projekts habe ich die Android Material Design Library entdeckt. Es ist ziemlich mächtig und mir hat es Spaß gemacht, damit zu arbeiten. Ich habe meinem FloatingActionButton ein benutzerdefiniertes Verhalten hinzugefügt, sodass es beim Scrollen nach unten verschwindet. Jetzt habe ich erwähnt, wenn eine SnackBar angezeigt wird, wird die Position des FAB nicht mehr automatisch behandelt.Einem FloatingActionButton mehr als ein Verhalten hinzufügen

Nach einigem Debugging habe ich herausgefunden, dass der Anker zur RecyclerView gesetzt wird und das customBehaviour hinzugefügt wird, um das Standardverhalten vom CoordinatorLayout abhängig von der SnackBar zu scrollen.

Also frage ich mich, kann ich mehr als ein Verhalten zu meinem FAB hinzufügen? Oder kann ich es irgendwie sagen, dass das defaults nicht überschrieben, sondern erweitert werden sollte?

Oder kann ich mehr als eine davon schreiben?

Antwort

0

Okay, ich habe eine Methode gefunden, um das gewünschte Verhalten zu realisieren, aber es hat mehr eine Umgehungsmöglichkeit als eine Antwort.

Wenn ich die Scrollbehavior programmatisch in der Java-Code wie folgt hinzu:

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { 
     @Override 
     public void onScrollStateChanged(RecyclerView recyclerView, int newState) { 
      if (newState == RecyclerView.SCROLL_STATE_IDLE) { 
       sendMailFAB.show(); 
      } 
      super.onScrollStateChanged(recyclerView, newState); 
     } 

     @Override 
     public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 
      super.onScrolled(recyclerView, dx, dy); 
      if (dy > 0 && sendMailFAB.isShown()) 
       sendMailFAB.hide(); 
     } 
    }); 

Und dann das benutzerdefinierte Verhalten löschen und es ist Anker in der XML-Datei, das Standardverhalten des CoordinatorLayout nimmt die Snackbar und die onScrollListener die Scrollverhalten

<?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:tools="http://schemas.android.com/tools" 
    android:id="@+id/fragment_coordinatorLayout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:context="de.flowment.designExample.StartActivity"> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/startRecyclerView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:scrollbars="vertical"> 

    </android.support.v7.widget.RecyclerView> 

    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/fab" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom|end" 
     android:layout_margin="@dimen/fab_margin" 
     app:layout_anchorGravity="bottom|end" 
     android:src="@android:drawable/ic_dialog_email" /> 

    <!-- DELETE THIS PART, BECAUSE IT'S NOT USED ANYMORE AND BLOCKS THE DEFAULT. 
    app:layout_anchor="@id/startRecyclerView" 
    app:layout_behavior="de.flowment.designExample.FABScrollBehavior" />--> 


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

Also habe ich zwei Verhaltensweisen erreicht, aber wie ich schon sagte, ist dies eher ein Workaround.