Warum blinken die Symbole / Texte der TabLayout-Tabs, wenn Sie zwischen den Seiten wischen?

8

Hintergrund

Ich habe die PagerSlidingTabStrip -Bibliothek lange Zeit verwendet, um Tabs über einem ViewPager anzuzeigen .

Kürzlich wurde ich damit beauftragt, Icons (mit Selektoren, mit ausgewählten-gegen-nicht-ausgewählten Zuständen) anstelle von Texten für die Tabs zu setzen, und das tat ich auch. Es scheint jedoch, dass die Bibliothek nicht gut damit umgehen konnte, manchmal leere Tabs angezeigt, also bin ich nach TabLayout , das ein Teil der Design-Bibliothek von Google ist

Das Problem

Ich habe ein paar Lösungen zum Hinzufügen von Symbolen zum TabLayout bemerkt, aber jedes von ihnen hat eines oder mehrere dieser Probleme:

  1. keine Symbole werden angezeigt
  2. Symbole werden angezeigt, können aber von Zeit zu Zeit blinken, besonders wenn Sie eine Auswahl für sie verwenden, wenn "exitFadeDuration" eingestellt ist oder wenn Sie schnell wischen
  3. Klicken auf Registerkarten ändert nicht die aktuelle Seite des viewPagers.

Der Code

Der Code, den ich verwendet habe, stammt aus Käsequadrat in der Datei MainActivity.java. Es ist ziemlich einfach:

%Vor%

Die Lösungen, die ich ausprobiert habe, sind:

  1. Setzen eines Symbols für jede Registerkarte (und entfernen Sie "getPageTitle" Code des Adapters):

    %Vor%

    Ich habe auch versucht, setOnTabSelectedListener hinzuzufügen, wenn ich keinen Selektor benutzt habe.

    Diese Lösung führt zu einem blinkenden Effekt (Problem Nr. 2).

  2. Erweitern Sie TabLayout, um Symbole zu unterstützen oder TabViewProvider zu implementieren, wie hier .

    Das Erweitern von TabLayout zeigt überhaupt keine Icons an (Problem # 1), und das Implementieren von TabViewProvider hat das Problem, Symbole zu blinken (ziemlich selten).

  3. Geben Sie für getPageTitle einen SpannableString zurück, der das Symbol enthält, wie hier . Dies zeigte die Icons überhaupt nicht für mich.

Ich erinnere mich, dass ich auch andere Lösungen ausprobiert habe, aber sie hatten auch Probleme, wie ich bereits erwähnt habe.

Die Frage

Wie werden Symbole für die Registerkarten richtig eingestellt?

Gibt es einen offiziellen Weg, dies zu erreichen? Ich möchte mindestens eine ausgewählte und nicht ausgewählte Bilder für jede Registerkarte haben. Der Übergang bei der Auswahl ist ein guter Bonus, den ich mir erhofft habe, da er auf diese Weise schöner aussieht.

Warum blinken die Symbole trotzdem? Ich habe bemerkt, dass es sogar für Texte vorkommt ...

Gibt es vielleicht einen Workaround?

    
android developer 05.08.2015, 09:32
quelle

1 Antwort

8

Es scheint ein bekanntes Problem zu sein und dass es auch für Texte passiert:

Ссылка

Es wird in der nächsten Version der Bibliothek behoben.

Eine Problemumgehung ist die Verwendung früherer Versionen für den Moment:

%Vor%

BEARBEITEN: Dies ist keine gute Problemumgehung, da Symbole in einigen Fällen verschwinden können (ich denke eine Kombination aus Orientierungsänderung und Wischen).

EDIT: Ich denke, dass es nicht verschwindet, aber mehr wie seine Farbe zu etwas anderem ändert, das nicht im Selektor existiert, den ich ihm gegeben habe (der nur 2 Zustände hat: ausgewählt und Standard).

BEARBEITEN: OK, habe einen Workaround für die Symbole gefunden.

  1. benutze die alte Version (22.2.0) wie ich oben erwähnt habe.

  2. Sie müssen vermeiden, Selektoren für die Symbole zu verwenden. Verwenden Sie stattdessen die genauen Bildressourcen-IDs:

    %Vor%
  3. aktualisiert die Symbole basierend auf der Seitenauswahl als solche:

    %Vor%

Denken Sie auch daran, bei der Initialisierung des TabLayouts dieselbe Schleife aufzurufen. So ähnlich:

%Vor%

Ich denke, dass dies auch das Problem für Texte und nicht nur für Icons beheben sollte.

EDIT: es scheint, dass v23 es behoben wird, und dass es sehr bald verfügbar sein wird.

    
android developer 11.08.2015, 09:15
quelle