Próbuję pracować nad nowym TabLayout
z biblioteki projektów Androida.
Chcę zmienić tekst tabulatora na niestandardową czcionkę . Próbowałem poszukać jakiejś stylizacji TabLayout
, ale skończyło się na tym .
Proszę o wskazówki, jak zmienić czcionki tekstu tabulatorów.
Odpowiedzi:
Utwórz TextView z kodu Java lub XML w ten sposób
Pamiętaj, aby zachować identyfikator w obecnym kształcie, ponieważ TabLayout sprawdza ten identyfikator, jeśli używasz niestandardowego widoku tekstu
Następnie z kodu napełnij ten układ i ustaw niestandardowy
Typeface
w tym widoku tekstu i dodaj ten widok niestandardowy do kartyźródło
tabTextColor
itabSelectedTextColor
właściwości w tej sytuacji?Jeśli używasz
TabLayout
i chcesz zmienić czcionkę, musisz dodać nową pętlę for do poprzedniego rozwiązania w następujący sposób:Zapoznaj się ze zmianą stylu czcionki na kartach paska akcji za pomocą narzędzia Sherlock
źródło
TabLayout
setTypeFace
jest aTypeFace
, na wypadek gdybyś nie mógł znaleźćFont
klasy (która wydaje mi się nie istnieć)Stwórz swój własny styl i użyj stylu rodzica jako
parent="@android:style/TextAppearance.Widget.TabWidget"
W układzie kart użyj tego stylu jako
app:tabTextAppearance="@style/tab_text"
Przykład: styl:
Przykład: komponent układu kart:
źródło
parent="TextAppearance.Design.Tab"
w moim przypadku.TextAppearance.Widget.TabWidget
. Odpowiedź @Javatara rozwiązała problem.Świetna odpowiedź od praveen Sharma. Tylko mały dodatek: zamiast używać
changeTabsFont()
wszędzie tam, gdzie potrzebujeszTabLayout
, możesz po prostu użyć własnegoCustomTabLayout
.I jeszcze jedno.
TabView
jestLinearLayout
zTextView
wnętrzem (opcjonalnie może również zawieraćImageView
). Możesz więc uprościć kod:Ale nie polecałbym tego sposobu. Jeśli
TabLayout
implementacja ulegnie zmianie, ten kod może działać nieprawidłowo lub nawet ulec awarii.Innym sposobem dostosowania
TabLayout
jest dodanie do niego widoku niestandardowego. Oto wspaniały przykład .źródło
addTab(Tab tab, int position, boolean setSelected)
zamiast tego należy nadpisaćaddTab(Tab tab)
.Aby korzystać z obsługi czcionek w
XML
funkcji na urządzeniach z systememAndroid 4.1
(poziom API 16) lub nowszym, użyj biblioteki obsługi 26+.myfont.ttf
plik w nowo utworzonym folderze czcionekDodatkowo
res/values/styles.xml
:Do pliku układu dodaj aplikację: tabTextAppearance = "@ style / customfontstyle",
Proszę zapoznać się z [fonts in xml]. ( Https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml )
źródło
Poniższa metoda zmieni czcionkę w całości
ViewGroup
rekurencyjnie. Wybrałem tę metodę, ponieważ nie musisz przejmować się wewnętrzną strukturąTabLayout
. Używam biblioteki kaligrafii, aby ustawić czcionkę.źródło
Aby uzyskać obsługę projektu 23.2.0, używając setupWithViewPager, musisz przenieść kod z addTab (karta Tab) do addTab (karta Tab, boolean setSelected).
źródło
Możesz tego użyć, to działa dla mnie.
źródło
Cóż, okazało się to proste w 23.4.0 bez użycia pętli. Po prostu zastąp addTab (karta @NonNull Tab, boolean setSelected) zgodnie z sugestią @ejw.
A oto XML
Mam nadzieję, że to może pomóc :)
źródło
android:textColor="@color/graylove"
powinna mieć selektor listy stanów dla tego z określonym koloremJak odpowiedział Andrei , możesz zmienić czcionkę, rozszerzając klasę TabLayout . I jak Penzzz powiedział, nie można tego zrobić w addTab metody. Zastąp metodę onLayout , jak poniżej:
Musi Overwrite onLayout metoda, ponieważ kiedy używasz metody setupWithViewPager do powiązania TabLayout z ViewPager, musisz ustawić tekst tabulatora albo za pomocą metody setText, albo w PagerAdapter po tym, a kiedy to się stanie, metoda onLayout zostanie wywołana w nadrzędnym ViewGroup ( TabLayout) i to jest miejsce na ustawienie fontface. (Zmiana tekstu TextView powoduje wywołanie metody onLayout jego rodzica - tabView ma dwoje dzieci, jedno to ImageView, drugie to TextView)
Inne rozwiązanie:
Najpierw te wiersze kodu:
W powyższym rozwiązaniu należy zapisać poza dwiema pętlami.
Ale lepszym rozwiązaniem dla API> = 16 jest użycie android: fontFamily :
Utwórz katalog zasobów systemu Android o nazwie czcionka i skopiuj żądaną czcionkę do katalogu.
Następnie użyj tych stylów:
źródło
onLayout()
wywoływana przy każdej zmianie układu, takiej jak przełączanie kart, a nawet przewijanie listy poniżej kart, a zagnieżdżone pliki w aplikacjifor
z wieloma kartamiTabLayout
będą opóźnione.onLayout()
jest wywoływany wiele razy podczas przełączania kart (nie wiem dokładnie, dlaczego), ale aby to uwzględnić, ustawiam czcionki tylko wtedy, gdyboolean changed
jest prawdziwe. W ten sposób zapobiega się wielokrotnemu ustawianiu czcionek.My Resolve, tak jak ta, zmień tekst zakładki Specified,
źródło
źródło
Rozszerzenie Kotlin, które działało dla mnie:
źródło
Mój 2p, Kotlin ze sprawdzaniem referencji, ma zastosowanie wszędzie, ponieważ przestanie, jeśli coś jest nie tak.
źródło
A oto moja implementacja w Kotlinie, która pozwala również na zmianę czcionki dla wybranych i niezaznaczonych zakładek.
w attrs.xml:
źródło
Z funkcjami rozszerzającymi kotlin użyj tego:
}
źródło
Zmiana
if (tabViewChild instanceof TextView) {
dla
aby działał z android.support.design.widget.TabLayout (przynajmniej z com.android.support:design:23.2.0)
źródło