Mostra / nascondi BottomNavigationView sullo scorrimento in CoordinatorLayout con AppBarLayout

Sto cercando di utilizzare sia AppBarLayout che BottomNavigationLayout in un unico CoordinatorLayout e ho difficoltà a hide il BottomNavigationLayout come richiesto dalla linea guida materiale .

Voglio dire qualcosa di simile:

  • Come ottimizzare (ridurre) le size della mia applicazione android
  • Tabella Android SQLite non creata
  • getWidth non restituisce valore diverso dopo la scalatura
  • Crittografia RSA in Android e Java
  • Ripristino la password di Keystore
  • Come creare layout di tabella dynamicmente all'interno del thread
  •  <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="false"> <android.support.design.widget.AppBarLayout android:id="@+id/app_bar" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_insetEdge="top" android:theme="@style/AppTheme.AppBarOverlay"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:popupTheme="@style/AppTheme.PopupOverlay" app:layout_scrollFlags="scroll|enterAlways"/> </android.support.design.widget.AppBarLayout> <android.support.design.widget.BottomNavigationView android:id="@+id/bottom_nav" android:layout_width="match_parent" android:layout_height="56dp" android:layout_gravity="bottom" app:menu="@menu/menu_bottom_navigation"/> <FrameLayout android:id="@+id/content_container" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="top" app:layout_behavior="@string/appbar_scrolling_view_behavior"/> </android.support.design.widget.CoordinatorLayout> 

    Come potete vedere, ho anche un FrameLayout utilizzato per contenere un frammento con il contenuto effettivo. Attualmente non esistono comportmenti predefiniti / incorporati per BottomNavigationView – né per la vista stessa, né per i suoi fratelli. L' appbar_scrolling_view_behavior esistente gestisce la visualizzazione del contenuto in cosorting con l'appbar ma ignora altri fratelli.

    Sto cercando una soluzione per hide e mostrare sia l'appbar che la vista di navigazione in basso sullo scorrimento.

  • migliori pratiche per specificare la pronuncia per il motore Android TTS?
  • Perché EditText in una vista composita personalizzata riutilizza il text immesso in un'altra istanza di vista composta?
  • Cosa ho bisogno per la programmazione per Tegra GPU
  • Condividere i file tra le applicazioni
  • Le immagini aggiornate nella cartella degli asset non vengono visualizzate sul lancio dell'app
  • Il cerchio disegnato su canvas non corrisponde allo schermo
  • One Solution collect form web for “Mostra / nascondi BottomNavigationView sullo scorrimento in CoordinatorLayout con AppBarLayout”

    Dopo una o due giorni di ricerca ho stabilito con un Behavior personalizzato collegato al BottomNavigationView . La sua idea principale è quella di rilevare quando il fratello di BottomNavigationView viene scorciato in modo che possa hide il BottomNavigationView. Qualcosa come questo:

     public class BottomNavigationBehavior extends CoordinatorLayout.Behavior<BottomNavigationView> { public BottomNavigationBehavior() { super(); } public BottomNavigationBehavior(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean layoutDependsOn(CoordinatorLayout parent, BottomNavigationView child, View dependency) { boolean dependsOn = dependency instanceof FrameLayout; return dependsOn; } @Override public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, BottomNavigationView child, View directTargetChild, View target, int nestedScrollAxes) { return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL; } @Override public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, BottomNavigationView child, View target, int dx, int dy, int[] consumed) { if(dy < 0) { showBottomNavigationView(child); } else if(dy > 0) { hideBottomNavigationView(child); } } private void hideBottomNavigationView(BottomNavigationView view) { view.animate().translationY(view.getHeight()); } private void showBottomNavigationView(BottomNavigationView view) { view.animate().translationY(0); } } 

    Come potete vedere, sto utilizzando Simple ViewPropertyAnimator , ottenuto utilizzando il metodo animate della vista figlio. Ciò port ad una semplice animation che non corrisponde AppBarLayout al comportmento di AppBarLayout , ma è abbastanza decente per sembrare buono e allo stesso tempo è abbastanza semplice da implementare.

    Mi aspetto che a un certo punto la squadra Android aggiungerà un comportmento predefinito per il BottomNavigationView nella libreria di supporto, quindi non credo sia ragionevole investire molto più tempo per esattamente duplicare il comportmento di AppBarLayout.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.