Mam zakładki instalacyjne jako UPDATE 29/05/2015 tego postu. Karty biorą pełną szerokość na moim telefonie Nexus 4, ale na tablecie Nexus 7 - na środku i nie pokrywają pełnej szerokości ekranu.
Zrzut ekranu Nexusa 7 Zrzut ekranu Nexusa 4
Mam zakładki instalacyjne jako UPDATE 29/05/2015 tego postu. Karty biorą pełną szerokość na moim telefonie Nexus 4, ale na tablecie Nexus 7 - na środku i nie pokrywają pełnej szerokości ekranu.
Zrzut ekranu Nexusa 7 Zrzut ekranu Nexusa 4
Odpowiedzi:
„Prostsza” odpowiedź pożyczona od Kaizie wystarczy dodać
app:tabMaxWidth="0dp"
w plikuTabLayout
XML:źródło
Miałem ten sam problem i sprawdziłem styl TabLayout i stwierdziłem, że jego domyślny styl
Widget.Design.TabLayout
ma różne implementacje (normal, landscape i sw600dp).Potrzebujemy tylko tabletu (sw600dp), który ma następującą implementację:
Z tego stylu użyjemy „ tabGravity ” (możliwymi wartościami są „środek” lub „wypełnienie”) przy użyciu wartości „wypełnienie”.
Musimy jednak pójść głębiej, a potem widzimy, że ten rozciąga się, od
Base.Widget.Design.TabLayout
którego wdrożenia jest:Dlatego z tego stylu będziemy musieli przesłonić „ tabMaxWidth ”. W moim przypadku ustawiłem to
0dp
, więc nie ma limitu.Mój styl wyglądał tak:
A następnie pasek kart wypełni cały ekran z boku na bok.
źródło
Rozwiązanie dla przewijalnego: (TabLayout.MODE_SCROLLABLE), czyli wtedy, gdy potrzebujesz więcej niż 2 kart (Dynamiczne karty)
Krok 1: style.xml
Krok 2: Twój układ XML
Krok 3: W swojej aktywności / fragmencie, gdziekolwiek masz zakładki.
źródło
addTab
i ustawiłem wagę każdej zakładki w miarę dodawania.override fun addTab(tab: Tab, position: Int, setSelected: Boolean) { super.addTab(tab, position, setSelected) allotEachTabWithEqualWidth() }
Aby zmusić tabulatory do zajęcia pełnej szerokości (podzielenia na równe rozmiary), zastosuj do
TabLayout
widoku następujące elementy :źródło
TabLayout
ustawienie jest ustawioneapp:tabMode=“scrollable”
, spowoduje to, że zakładki będą miały stałą długość (długie słowa będą się owijać), a zakładki nie będą się przesuwać, co zasadniczo sprawi, że zakładki znów się „naprawią”.Jest to pomocne, musisz spróbować
źródło
Pracuj dla mnie. To też ma
xmlns:app="http://schemas.android.com/apk/res-auto"
źródło
Dla mnie poniższy kod działał i był wystarczający.
źródło
Sprawdź poniższe kody, aby znaleźć rozwiązania.
Poniżej znajduje się kod układu:
Uwaga: w celu dynamicznego liczenia kart nie zapomnij wywołać setTabNumbers (tabcount).
Referencje pochodzą z https://medium.com/@elsenovraditya/set-tab-minimum-width-of-scrollable-tablayout-programmatically-8146d6101efe
źródło
Rozwiązanie do przewijania (Kotlin)
W xml:
W Kotlinie:
W moim przypadku, jeśli mniej niż 3 karty, przydzielam równe miejsce.
Uwaga: Jeśli warunek jest zgodny z wymaganiami
źródło
Dlaczego cała ta gorączkowa praca? Wystarczy umieścić
app:tabMode="scrollable"
TabLayout w XML. Otóż to.źródło
tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
ten sposób. Jest to tylko właściwość ustawiona dla tabLayout, nie ma znaczenia, ile kart dodajesz statycznie czy dynamicznie.W moim wariancie tego problemu miałem 3 zakładki umiarkowanego rozmiaru, które nie zajmowały pełnej szerokości na tabletach. Nie potrzebowałem przewijania kart na tabletach, ponieważ tablety są wystarczająco duże, aby wyświetlać wszystkie karty bez przewijania. Ale potrzebowałem kart do przewijania na telefonach, ponieważ telefony są zbyt małe, aby wyświetlić wszystkie karty razem.
Najlepszym rozwiązaniem w moim przypadku było dodanie
res/layout-sw600dp/main_activity.xml
pliku, w którym odpowiedni TabLayout mógłby miećapp:tabGravity="fill"
iapp:tabMode="fixed"
. Ale w moich stałychres/layout/main_activity.xml
, wyszedłem na zewnątrzapp:tabGravity="fill"
iapp:tabMode="fixed"
, i miałapp:tabMode="scrollable"
zamiast.źródło
Pamiętaj, że musisz także ustawić
aby wypełnić całą przestrzeń
źródło