8

Ho un'attività con 3 schede. Ogni pagina di schede è un frammento che visualizza un RecyclerView. Uno dei frammenti contiene FloatingActionButton. Sto implementando questo pulsante nel layout di Fragment. Lo sto facendo anche statico in basso a destra del frammento.Mostra/Nascondi FloatingActionButton su swap ViewPager

disposizione Frammento:

- CoordinatorLayout 
    - RecyclerView 
    - FAB (without any behavior) 

Nel layout di attività, ho:

- CoordinatorLayout 
    - AppBarLayout 
     - Toolbar 
     - TabLayout (SmartTabLayout) 
    - ViewPager 

Il problema ora è la FAB è seminascosta dalla vista quando Toolbar è espansa, ma pienamente dimostrato quando La barra degli strumenti è compressa. Anche se ciò non accade se implemento il pulsante FAB nell'attività stessa. Ma non voglio avere il pulsante in tutti i frammenti. Lo sto solo mettendo nel primo frammento.

Ecco una gif che ho fatto per spiegare questo più chiaro.

Fab hidden

XML per il layout di attività:

<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="wrap_content" 
      android:minHeight="?attr/actionBarSize" 
      android:background="@color/color_primary" 
      app:layout_scrollFlags="scroll|enterAlways" /> 

     <com.ogaclejapan.smarttablayout.SmartTabLayout 
      android:id="@+id/viewpagertab" 
      android:layout_width="match_parent" 
      android:layout_height="@dimen/tab_height" 
      android:background="@color/color_primary" /> 

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

    <android.support.v4.view.ViewPager 
     android:id="@+id/viewpager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

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

XML per il layout Fragment:

<?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" 
    android:id="@+id/coordinatorLayout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/card_list" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/fab_add" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_margin="@dimen/fab_margin" 
     android:src="@drawable/ic_plus_white_48dp" 
     app:layout_anchor="@id/card_list" 
     app:layout_anchorGravity="bottom|right|end" /> 

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

mia domanda è come faccio a fare in modo che il pulsante rimane visibile quando recyclerview viene fatta scorrere ?

risposta

4

L'opzione migliore sarebbe quella di inserire il FloatingActionButton nell'attività e chiamare show() e hide() in un ViewPager.OnPageChangeListener. In questo modo puoi ottenere il enter/exit animations conforme a Material Design guidelines.

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 

    @Override 
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 

    } 

    @Override 
    public void onPageSelected(int position) { 
     if (position == 0) { 
      fabAdd.show(); 
     } else { 
      fabAdd.hide(); 
     } 
    } 

    @Override 
    public void onPageScrollStateChanged(int state) { 

    } 
}); 

Risultato:

enter image description here

+1

Penso che userò la tua soluzione in quanto fornisce più funzionalità. Grazie per il tuo suggerimento! – AimanB

+1

@AimanB Un'altra cosa, assicurati di usare l'ultima versione della libreria di progettazione del supporto, hanno risolto molti problemi nelle ultime versioni, una delle animazioni predefinite mostrate con i metodi 'show()' e 'hide()'. –

1

Aggiungi

app:layout_behavior="@string/appbar_scrolling_view_behavior" 

al RecyclerView troppo.

+0

Questo non ha alcun effetto a tutti. – AimanB