Wie kann man verhindern, dass der FAB in ViewPager verschoben wird und dennoch Teil des Fragments ist?

8

Hintergrund

Gemäß den Richtlinien für das Materialdesign ( here ), wenn Sie einen ViewPager verwenden, der einen FAB (Floating Action Button) für die darin enthaltenen Fragmente hat, sollte sich der FAB nicht als Teil der Fragmente bewegen, aber entweder verschwinden oder durch ein anderes ersetzt werden oder zu etwas anderem animieren.

Kurz gesagt, statt dessen:

Ссылка

Sie sollten dies tun:

Ссылка

Das Problem

Ich sehe kein Beispiel oder Tutorial, wie das am besten funktioniert.

Ich meine, einen FAB für jedes Fragment (oder einige davon) im ViewPager zu haben, während jeder von seinem Fragment (Logik und wie es aussieht) gesteuert wird, aber der FAB wird sich nicht wirklich als Teil des Objekts bewegen fragmentieren, während zwischen den Fragmenten im ViewPager verschoben wird.

Selbst als Beispiel-Apps sehe ich dieses Verhalten nirgends. Die Kontakte-App hat für beide Fragmente denselben FAB, und der Dialer bewegt sich gerade.

Es gibt sogar Apps, die das schlechte Verhalten verwenden (wie Solid-Explorer). Auf YouTube gibt es ein FAB (auf dem "Account" -Fragment), aber es ist in der Kopfzeile, also könnte es dort ok sein.

Die Frage

Wie sollten Sie das richtige Verhalten implementieren? Würdest du wirklich den FAB als Teil der Aktivität anstelle der Fragmente verwenden?

Gibt es vielleicht ein Tutorial und / oder eine Probe dazu?

Wenn der ViewPager mit dem Scrollen beginnt, könnte ich vielleicht den FAB loslösen und ihn an die Aktivität anhängen, während er gescrollt wird, und wenn er gescrollt hat, könnte ich ihn verstecken und das andere Fragment anzeigen?

    
android developer 03.08.2015, 07:15
quelle

1 Antwort

1

Ich hatte das gleiche Problem mit einem Viewpager und vor einiger Zeit und löste auf diese Weise:

  • Fügen Sie die Fab der Aktivität über dem viewpager
  • hinzu
  • Fügen Sie OnPageChangeListener zu ViewPager hinzu und speichern Sie die Position von onPageSelected(int position) in einer globalen Variable in Ihrer Aktivität
  • In onPageSelected starte die Animation deiner Fab (es kann sowohl xml als auch programmatisch sein, ich habe es mit xml gemacht) und ändere seine colorTint
  • In Ihrer OnClickListener s onClick(View v) , wenn Sie fab ID (oder View) Ihrer Fab abfragen, um zu bestimmen, welche Aktion Sie ausführen sollten, können Sie eine switch-Anweisung mit der Position erstellen, die Sie zuvor in onPageSelected erhalten haben

BEARBEITEN

Das sind meine beiden anim.xml, die ich ähnlich wie Android-Richtlinien erstellen wollte:

Anim um alte Fab zu verschwinden:

%Vor%

Animation, um eine neue anzuzeigen:

%Vor%     
Giorgio Antonioli 03.08.2015 07:38
quelle