0

kollabiert ist Ich versuche, ein benutzerdefiniertes Verhalten für den FAB zu schreiben. Im Moment steuert das Verhalten, das ich von here übernommen habe, die Sichtbarkeit des FAB ab dem Zeitpunkt, zu dem die onNestedScroll() - Methode von der CoordinatorLayout.Behavior-Klasse aufgerufen wird.Wie der FAB reagieren auf Abwärts Scroll-Ereignisse, bevor das AppBarLayout in einem CoordinatorLayout

Aber onNestedScroll() wird nur nach unten blättern Ereignisse Erkennung (dh wenn dyConsumed > 0) (Hinweis:dyConsumed ist ein param von onNestedScroll), sobald das AppBarLayout den oberen Rand des Bildschirms erreicht hat (dh wenn der AppBarLayout hat minimiert), und der Inhalt der NestedScrollView (oder einer anderen vertikal scrollbaren Ansicht) ist der einzige sichtbare Scroll-Inhalt auf dem Bildschirm.

Ich möchte die FAB verschwinden, nachdem der Benutzer gescrollt hat, bevor das AppbBarLayout zusammengebrochen ist.

Ich habe versucht, die FAB abhängig von einer anderen Ansicht zu machen:

@Override 
    public boolean layoutDependsOn(CoordinatorLayout parent, FloatingActionButton child, View dependency) { 
     return dependency instanceof viewToDependOn; 

    } 

Und dann die Ansicht dissapear machen, wenn diese Ansicht Zustand ändert:

@Override 
    public boolean onDependentViewChanged(CoordinatorLayout parent, final FloatingActionButton child, View dependency) { 

    child.setVisibility(View.GONE); 

    return true; 
    } 

Aber weil onDependentViewChanged jedes Mal der Ansicht aufgerufen wird, dass die FAB ist davon abhängig, dass die Methode nach Berührungsereignissen zu oft aufgerufen wird, damit ich das FAB nicht wieder sichtbar machen kann, nachdem es unsichtbar gemacht wurde.

Meine Frage in Kürze: Wie kann ich den Sichtbarkeitsstatus des FAB in einer NestedScrollView umschalten, ohne auf die Scroll-Ereignisse von AppBarLayout angewiesen zu sein?

Wenn Sie mehr Code lassen Sie mich wissen,

Vielen Dank im Voraus

Antwort

0

sollten Sie verwenden:

AppBarLayout.OnOffsetChangedListener 

Diese Methode: onOffsetChanged

onNestedScroll nur Scroll-Ereignisse erfassen die nicht mit dem Zusammenklappen/Erweitern des AppBarLayout zusammenhängen.

Es

, Sie so etwas tun kann:

if(verticalScroll == 0) 
    // appBarLayout Expanded 
else if(verticalScroll == appBarLayout.totalScrollRange()) 
    // appBarLayout Collapsed 

Und hide/show Ihre FAB basierend auf einigen Offset- oder Kollaps/erweitern Modus des appBarLayout

+0

Danke für Ihre Hilfe –

+0

Bitte beachten Sie, dass Wenn Sie findsystemwindows verwenden, um hinter die statusBar zu zeichnen, gibt Ihnen appBarLayout.totalScrollRage möglicherweise den Wert (total - statusBarHeight). Ich bin mir nicht sicher, unter welchen Umständen es passiert, aber es tut es. –

+0

Danke für die Information –