11

TabLayout jest skonfigurowana z ViewPager, ma wiele zakładek, MODE_SCROLLABLE i keyline app:tabContentStart="72dp".TabLayout wybrana zakładka grawitacja

Gdy użytkownik wybierze kartę, próbuje przewinąć wybraną kartę do środka. Chciałbym, aby wybrana zakładka została wyrównana do keyline, a nie wyśrodkowana. Czy to możliwe?

Biblioteka wsparcia projektowania Androida v22.2.0.

+0

Co masz na myśli mówiąc o keyline? –

+1

"Keyline" to termin używany w https://www.google.com/design/spec/components/tabs.html, w bibliotece wsparcia projektowania Androida jest zadeklarowany za pomocą 'app: tabContentStart'. –

Odpowiedz

4

Jeśli dobrze zrozumiałem twoje pytanie, możesz odjąć pozycję pierwszej karty od wybranej pozycji tabulatora. Następnie wystarczy ustawić inną pozycję dla tej wybranej karty.

7

Niestety, metoda calculateScrollXForTab() z TabLayout jest prywatna i nie można jej zastąpić podklasami. Tak czy inaczej można skopiować TabLayout źródłowy w projekcie, a następnie ewentualnie rozszerzając go o swojej klasie, a także zmienić sposób calculateScrollXForTab() tak:

private int calculateScrollXForTab(int position, float positionOffset) { 
    if (mMode == MODE_SCROLLABLE) { 
     View final selectedChild = mTabStrip.getChildAt(position); 
     // LoG.i ("scrollTo" String.valueOf ((int) selectedChild.getLeft())); 
     return (int) selectedChild.getLeft(); 
    } 
    return 0; 
} 

ta zwraca wartość limitu na lewej zakładce wybranego, następnie przewijanie jest zmuszane do tej wartości. Ekstremalne prawe zakładki pozostaną na miejscu, jeśli zostaną wybrane, ponieważ przewijanie przewija przewijanie do granic dziecka.

Próbowałem ją i działa, choć musiałem rozwiązać dwa problemy z jednym CompatTextView nie znaleziono w android.support.v7.internal.widget i sposobu setupWithViewPager() że nie istnieje w źródle dostępnym do mnie (ja myślę o wersji)