Wie lassen sich nur bestimmte Fragmente in einem ViewPager von CoordinatorLayout scrollen?

9

Hintergrund

Ich habe einen viewPager mit 3 Fragmenten und Tabs für sie. Jedes Fragment hat eine Intro-Phase (für sich), die keinen scrollbaren Inhalt hat.

Nach dem Verlassen der Einführungsphase gibt es eine RecyclerView, in die der Benutzer scrollen kann.

Das Problem

Ich muss die neue Design-Bibliothek verwenden, damit beim Scrollen (nur über recyclerView) die actionBar ausgeblendet wird und die Tabs weiterhin angezeigt werden.

Wenn der Benutzer zu einem Fragment geht, das noch keinen scrollbaren Inhalt enthält, sollte die actionBar ähnlich wie " Google Play Kiosk " hat. In der Tat würde ich sogar glücklich sein zu haben, was sie haben: sobald Sie beginnen, nach links / rechts zu wischen, zeigen Sie die Aktionsleiste erneut.

Sache ist, wenn ich den Richtlinien und Proben folge, habe ich 2 Probleme:

  1. Die nicht scrollbare Phase für Fragmente wird unten abgeschnitten, als ob sie gescrollt werden könnte.

  2. Ich kann nicht finden, wie ich die actionBar erneut anzeigen und sie dort hängen lassen kann, bis ich zu einem scrollbaren Inhalt übergehe (entweder durch Wechsel zu einem anderen Fragment oder wenn sich der Inhalt des aktuellen Fragments zu a ändert scrollbarer Inhalt).

Was ich versucht habe

Hier ist ein kurzer Auszug der aktuellen Layout-XML-Datei der Aktivität:

%Vor%

Die Fragmente haben das Layout eines ViewAnimators, der einfach zwischen den Phasen umschaltet, während einer davon der nicht scrollbare Inhalt ist und der andere der RecyclerView.

Ich habe versucht, eine NestedScrollView / ScrollView den nicht scrollbaren Inhalt hinzuzufügen und erzwingen, um sich selbst zu füllen, mit android: fillViewport="true", aber es hat nicht funktioniert. Bei ScrollView war das Scrollen nicht möglich.

EDIT: Eine andere Sache, die ich ausprobiert habe, ist die Verwendung von addOnPageChangeListener auf dem viewPager, so dass ich in onPageSelected die Flags für die Symbolleiste setzen konnte:

%Vor%

Es funktioniert, aber es hat auch Probleme:

  1. Beim horizontalen Scrollen kann ich sehen, dass der Inhalt des nicht scrollbaren Fragments abgeschnitten wird, und wenn ich zu dem neuen Fragment gehe (beende den Bildschirm nicht, um es am Fragment zu fangen), dann verkleinert es seine Größe auf passen Sie den richtigen Platz.
  2. Die Symbolleiste wird nicht erneut angezeigt.
  3. Wenn die Symbolleiste wegen Scrollens in einem anderen Fragment ausgeblendet ist und ich mich jetzt auf dem nicht scrollbaren Fragment befinde, wird tatsächlich weniger Platz zum Ausfüllen als vorgesehen benötigt, so dass am unteren Rand Platz frei ist.

BEARBEITEN: Eine Lösung besteht darin, eine leere Ansicht der gleichen Höhe der Aktionsleiste (layout_height="? actionBarSize") am unteren Rand des Inhalts der nicht scrollbaren Fragmente hinzuzufügen. Wenn die Aktionsleiste jedoch ausgeblendet ist, kann ich die Ansicht sehen, daher gibt es leeren Platz. Ich muss immer noch wissen, wie man die Aktionsleiste in diesem Fall wieder anzeigt.

Die Frage

Wie stelle ich ein anderes Verhalten für die Symbolleiste ein, so dass es bestimmte Zustände anzeigt und festhält, aber nur scrollbar ist, wenn auf dem aktuellen Fragment eine RecyclerView angezeigt wird?

    
android developer 17.11.2015, 09:32
quelle

0 Antworten