Próbuję zdefiniować układ GUI przy użyciu plików XML w systemie Android. O ile się dowiem, nie ma sposobu, aby określić, że twoje widżety powinny używać niestandardowej czcionki (np. Takiej, którą umieściłeś w asset / font /) w plikach XML i możesz używać tylko czcionek zainstalowanych przez system.
Wiem, że w kodzie Javy mogłem ręcznie zmienić czcionkę każdego widżetu, używając unikalnych identyfikatorów. Alternatywnie mógłbym powtórzyć wszystkie widżety w Javie, aby wprowadzić tę zmianę, ale prawdopodobnie byłoby to bardzo powolne.
Jakie mam inne opcje? Czy istnieją lepsze sposoby tworzenia widżetów o niestandardowym wyglądzie? Nie chcę, aby trzeba było ręcznie zmieniać czcionkę dla każdego nowego widżetu, który dodam.
Odpowiedzi:
Jak się nauczyłem, możesz rozszerzyć TextView, aby ustawić niestandardowe czcionki tutaj .
TextViewPlus.java:
attrs.xml: (w res / values)
main.xml:
W folderze zasobów umieściłbyś plik „saxmono.ttf” .
AKTUALIZACJA 01.08.13
W przypadku tej metody istnieją poważne problemy z pamięcią. Zobacz komentarz chedabob poniżej.
źródło
xmlns:foo="http://schemas.android.com/apk/res/com.example
Spóźniłem się 3 lata na imprezę :( Jednak może to być przydatne dla kogoś, kto może natknąć się na ten post.
Napisałem bibliotekę, która buforuje kroje pisma, a także pozwala określić niestandardowe kroje pisma bezpośrednio z XML. Bibliotekę znajdziesz tutaj .
Oto, jak wyglądałby Twój układ XML, kiedy go używasz.
źródło
compile 'com.mobsandgeeks:android-typeface-textview:1.0'
ale to nie zadziałało.xmlns:geekui="http://schemas.android.com/apk/res-auto"
To może być trochę za późno, ale musisz utworzyć klasę pojedynczą, która zwraca niestandardowy krój pisma, aby uniknąć wycieków pamięci.
Klasa TypeFace:
Niestandardowy TextView:
Według XML:
Programowo:
źródło
Stare pytanie, ale na pewno chciałbym przeczytać tę odpowiedź tutaj, zanim zacząłem własne poszukiwania dobrego rozwiązania. Kaligrafia rozszerza
android:fontFamily
atrybut, dodając obsługę niestandardowych czcionek w folderze zasobów, na przykład:Jedyne, co musisz zrobić, aby go aktywować, to dołączyć go do kontekstu działania, z którego korzystasz:
Możesz również określić własny atrybut niestandardowy do zastąpienia
android:fontFamily
Działa również w motywach, w tym AppTheme.
źródło
Korzystanie z DataBinding :
W XML:
plik czcionki musi być w formacie
assets/fonts/
źródło
Jeśli masz tylko jeden krój, który chcesz dodać, i chcesz, aby napisano mniej kodu, możesz utworzyć dedykowany TextView dla określonej czcionki. Zobacz kod poniżej.
W main.xml możesz teraz dodać swój textView w następujący sposób:
źródło
Najlepszy sposób na zrobienie tego Z wersji zapoznawczej Androida O jest następujący:
1.) Kliknij prawym przyciskiem folder res i przejdź do katalogu zasobów Nowy> Android .
Zostanie wyświetlone okno New Resource Directory.
2.) Na liście Typ zasobu wybierz czcionkę , a następnie kliknij przycisk OK.
3.) Dodaj pliki czcionek do folderu czcionek . Poniższa struktura folderów generuje R.font.dancing_script, R.font.la_la i R.font.ba_ba.
4.) Kliknij dwukrotnie plik czcionki, aby wyświetlić podgląd czcionek pliku w edytorze.
Następnie musimy stworzyć rodzinę czcionek
1.) Kliknij prawym przyciskiem myszy folder czcionek i przejdź do Nowy> Plik zasobów czcionek . Zostanie wyświetlone okno New Resource File.
2.) Wprowadź nazwę pliku, a następnie kliknij OK . W edytorze zostanie otwarty nowy kod XML zasobu czcionek.
3.) Umieść każdy plik czcionki, styl i atrybut wagi w elemencie znacznika czcionki. Poniższy kod XML ilustruje dodawanie atrybutów związanych z czcionkami w kodzie XML zasobu czcionek:
Dodawanie czcionek do TextView:
Jak z dokumentacji
wszystkie kroki są prawidłowe.
źródło
Rozszerz
TextView
i nadaj mu atrybut niestandardowy lub po prostu użyj atrybutu android: tag, aby przekazać ciąg znaków, którego czcionki chcesz użyć. Będziesz musiał wybrać konwencję i trzymać się jej, na przykład umieszczę wszystkie moje czcionki w folderze res / asset / fonts /, aby Twoja klasa TextView wiedziała, gdzie je znaleźć. Następnie w konstruktorze ustawiasz czcionkę ręcznie po wywołaniu super.źródło
Jedynym sposobem użycia niestandardowych czcionek jest użycie kodu źródłowego.
Pamiętaj tylko, że Android działa na urządzeniach z bardzo ograniczonymi zasobami, a czcionki mogą wymagać dużej ilości pamięci RAM. Wbudowane czcionki Droid są specjalnie wykonane i, jeśli zauważysz, brakuje wielu znaków i dekoracji.
źródło
Mogę mieć prostą odpowiedź na to pytanie bez rozszerzania TextView i implementowania długiego kodu.
Kod :
Umieść niestandardowy plik czcionki w folderze zasobów, jak zwykle, i spróbuj tego. Mi to pasuje. Po prostu nie rozumiem, dlaczego peter podał tak obszerny kod dla tej prostej rzeczy lub dał odpowiedź w starej wersji.
źródło
Można również zdefiniować w XML bez tworzenia niestandardowych klas
style.xml
activity_main.xml
Szybka uwaga, bo po prostu zawsze zapomniał gdzie umieścić czcionki, jej, że czcionka musi być w środku
assets
i ten folder znajduje się na tym samym poziomieres
isrc
, w moim przypadku jegoassets/fonts/ionicons.ttf
Zaktualizowano Dodano układ główny, ponieważ ta metoda musi
xmlns:app="http://schemas.android.com/apk/res-auto"
działaćAktualizacja 2 Zapomniałem o bibliotece, którą zainstalowałem wcześniej o nazwie Kaligrafia
źródło
xmlns:app="http://schemas.android.com/apk/res-auto"
do układu głównego, sprawdź również zaktualizowaną odpowiedźOdpowiedź Piotra jest najlepsza, ale można ją poprawić, korzystając z pliku styles.xml z systemu Android, aby dostosować czcionki dla wszystkich widoków tekstu w aplikacji.
Mój kod jest tutaj
źródło
Istnieją dwa sposoby dostosowywania czcionek:
!!! moja niestandardowa czcionka w asset / fonts / iran_sans.ttf
Sposób 1: Refrection Typeface.class ||| Najlepszym sposobem
wywołanie FontsOverride.setDefaultFont () w klasie rozszerza Application, Ten kod spowoduje zmianę wszystkich czcionek oprogramowania, nawet czcionek Toast
AppController.java
FontsOverride.java
Sposób 2: użyj setTypeface
dla specjalnego widoku po prostu wywołaj setTypeface (), aby zmienić czcionkę.
CTextView.java
FontUtils.java
źródło
Oto samouczek, który pokazuje, jak skonfigurować niestandardową czcionkę, taką jak opisana przez @peter: http://responsiveandroid.com/2012/03/15/custom-fonts-in-android-widgets.html
bierze również pod uwagę potencjalne wycieki pamięci, ala http://code.google.com/p/android/issues/detail?id=9904 . Również w samouczku jest przykład ustawiania niestandardowej czcionki na przycisku.
źródło
Możesz łatwo stworzyć niestandardową klasę Textview: -
Więc co musisz zrobić najpierw, utwórz
Custom textview
klasę, która została rozszerzona oAppCompatTextView
.Teraz za każdym razem wywołanie niestandardowego widoku tekstu i otrzymamy wartość int z atrybutu
int fontValue = attrs.getAttributeIntValue("http://schemas.android.com/apk/res-auto","Lato-Regular.ttf",-1)
.Lub
Możemy również uzyskać getTypeface () z widoku, który ustawiliśmy w naszym xml (
android:textStyle="bold|normal|italic"
). Więc rób, co chcesz robić.Teraz możemy
FontUtils
ustawić dowolną czcionkę .ttf w naszym widoku.źródło
Warto wiedzieć, że począwszy od systemu Android 8.0 (poziom interfejsu API 26) można użyć niestandardowej czcionki w języku XML .
Możesz zastosować niestandardową czcionkę do całej aplikacji w następujący sposób.
Umieść czcionkę w folderze
res/font
.W
res/values/styles.xml
użyciu w motywie aplikacji.<style name="AppTheme" parent="{whatever you like}"> <item name="android:fontFamily">@font/myfont</item> </style>
źródło
Fontinator to biblioteka systemu Android, która ułatwia korzystanie z niestandardowych czcionek. https://github.com/svendvd/Fontinator
źródło
Nie możesz rozszerzyć TextView, aby utworzyć widżet lub użyć go w układzie widżetów: http://developer.android.com/guide/topics/appwidgets/index.html
źródło