Czy w każdej kontrolce aplikacji można ustawić dowolną niestandardową czcionkę? A niekoniecznie runtime? (tj. z xml jeśli to możliwe lub tylko raz dla całej aplikacji w pliku JAVA)
Mogę ustawić czcionkę dla jednej kontrolki z tego kodu.
public static void setFont(TextView textView) {
Typeface tf = Typeface.createFromAsset(textView.getContext()
.getAssets(), "fonts/BPreplay.otf");
textView.setTypeface(tf);
}
Problem z tym kodem polega na tym, że powinien być wywoływany dla każdej kontroli. I chcę raz wywołać tę lub inną podobną metodę lub, jeśli to możliwe, ustawić właściwość w xml. Czy to możliwe?
android
fonts
textview
android-fonts
Prasham
źródło
źródło
VIEW
zamiast pisać osobno acustom text view
i acustom button view
? Moje wymagania dotyczą każdej kontrolki, a widok tekstu był tylko przykładem. Przepraszam, zapomniałem o tym wspomnieć ... :-(Odpowiedzi:
EDYCJA : Więc minęło trochę czasu i chciałbym dodać to, co uważam za najlepszy sposób, aby to zrobić, a nie mniej za pomocą XML!
Najpierw będziesz chciał utworzyć nową klasę, która zastąpi dowolny widok, który chcesz dostosować. (np. chcesz mieć przycisk z niestandardowym krojem czcionki? Rozszerz
Button
). Zróbmy przykład:Teraz, jeśli go nie masz, dodaj dokument XML pod
res/values/attrs.xml
i dodaj:Okej, więc pomijając to, wróćmy do
parseAttributes()
metody z wcześniejszej:Teraz wszystko gotowe. Możesz dodać więcej atrybutów do wszystkiego (możesz dodać kolejny dla stylu kroju - pogrubienie, kursywa, itp.), Ale teraz zobaczmy, jak go użyć:
xmlns:custom
Linia może być naprawdę coś, ale konwencja jest co pokazano powyżej. Liczy się to, że jest unikalny i dlatego używana jest nazwa pakietu. Teraz wystarczy użyćcustom:
przedrostka dla swoich atrybutów iandroid:
przedrostka dla atrybutów Androida.Ostatnia sprawa: jeśli chcesz to wykorzystać w stylu (
res/values/styles.xml
), należy nie dodaćxmlns:custom
linię. Po prostu odwołaj się do nazwy atrybutu bez przedrostka:Używanie niestandardowego kroju pisma w systemie Android
To powinno pomóc. Zasadniczo nie ma sposobu, aby to zrobić w XML i, o ile wiem, nie ma prostszego sposobu na zrobienie tego w kodzie. Zawsze możesz mieć metodę setLayoutFont (), która tworzy krój pisma raz, a następnie uruchamia setTypeface () dla każdego. Wystarczy, że zaktualizujesz go za każdym razem, gdy dodasz nowy element do układu. Coś jak poniżej:
EDYCJA : Więc po prostu zabrałem się za zaimplementowanie czegoś takiego samodzielnie, a jak skończyłem, zrobiłem taką funkcję:
Następnie użyj tej metody z onCreate () i przekaż wszystkie TextViews, które chcesz zaktualizować:
EDYCJA 9/5/12:
Ponieważ nadal uzyskuje się wyświetlenia i głosy, chciałbym dodać znacznie lepszą i bardziej kompletną metodę:
Jeśli przekażesz mu katalog główny twojego układu, będzie on rekurencyjnie sprawdzał widoki
TextView
lubButton
(lub inne, które dodasz do tej instrukcji if) w tym układzie i ustawi czcionkę bez konieczności określania ich przez identyfikator. To oczywiście zakłada, że chcesz ustawić czcionkę dla każdego widoku.źródło
recycle
TypedArray values
xmlns:custom="http://schemas.android.com/apk/res-auto"
Jest na to dość łatwy sposób poprzez XML. Wystarczy, że stworzysz własny widget, który rozszerzy TextView.
Najpierw utwórz plik w res / values / attrs.xml z następującą zawartością:
Następnie utwórz swój niestandardowy widżet:
Jak widać, powyższy kod odczyta czcionkę w folderze asset /. W tym przykładzie zakładam, że w folderze zasobów znajduje się plik o nazwie „custom.ttf”. Na koniec użyj widżetu w XML:
Uwaga: nie będziesz w stanie zobaczyć swojej niestandardowej czcionki w edytorze układu Eclipse. Dlatego wystawiłem
isInEditMode()
czek. Ale jeśli uruchomisz aplikację, niestandardowa czcionka będzie działać jak urok.Mam nadzieję, że to pomoże!
źródło
TextView
klasę; ustawiłemtypeface
w nim i użyłem niestandardowej kontroli w układzie tak jak zwykle i to zadziałało dla mnie ... Jednak było proste, że powyższe ...Przykład TextView z krojem roboto:
attr.xml
RobotoTextView.java:
Przykład użycia:
Zasoby: czcionki Roboto i Noto
źródło
Jest już za późno, ale moje pomaga innym
utworzyłem CustomTextView, który ma atrybut o nazwie typeFace i dba o problem z wyciekiem pamięci przy ładowaniu kroju pisma bez buforowania
Pierwsza
Fonts
klasa, która ładuje czcionki z zasobów tylko raznastępnie musisz dodać atrybut niestandardowy w attrs.xml dodaj to
następnie klasa niestandardowa
i na koniec dodaj widok tekstu
i możesz zmieniać czcionkę progrmaticlly za pomocą metody setTypeFace
również możesz przenieść niestandardową przestrzeń nazw do swojego układu nadrzędnego, jeśli chcesz użyć więcej niż jednej z tego widoku
Miłego kodowania :)
źródło
Poniższa metoda, wywołana w onCreate () i przekazana Twojej najbardziej zewnętrznej ViewGroup, będzie działać dla wszystkiego oprócz tekstu, który jest tworzony dynamicznie (tj. Listy dynamiczne, alerty, itp.). Łatwym sposobem na uzyskanie najbardziej zewnętrznej ViewGroup jest użycie getRootView w dowolnym z widoków.
Powinno to działać również w przypadku zawartości dynamicznej, po prostu musisz to nazwać, przekazując wszystko, co stworzyłeś, zaraz po utworzeniu (chociaż tego nie testowałem).
Aby zaoszczędzić pamięć, prawdopodobnie będziesz chciał ustawić krój jako zmienną statyczną, zamiast tworzyć nową za każdym razem, gdy pętla działa, tak jak tutaj.
źródło
Jeśli szukasz bardziej ogólnego rozwiązania programistycznego, stworzyłem statyczną klasę, której można użyć do ustawienia Kroju całego widoku (interfejs użytkownika). Zauważ, że pracuję z Mono (C #), ale możesz to łatwo zaimplementować za pomocą Java.
Możesz przekazać tej klasie układ lub określony widok, który chcesz dostosować. Jeśli chcesz być super wydajny, możesz zaimplementować to za pomocą wzorca Singleton.
W swoim ćwiczeniu będziesz musiał utworzyć obiekt Typeface. Tworzę swoje w OnCreate () używając pliku .ttf umieszczonego w moim katalogu Resources / Assets /. Upewnij się, że plik jest oznaczony jako zasób systemu Android we właściwościach.
źródło
Niestety system Android nie zapewnia szybkiego, łatwego i przejrzystego sposobu, w jaki chcesz zmienić czcionkę w całej aplikacji. Ale ostatnio przyjrzałem się tej sprawie i stworzyłem kilka narzędzi, które pozwalają zmienić czcionkę bez żadnego kodowania (możesz to wszystko zrobić poprzez xml, style, a nawet wygląd tekstu). Opierają się na podobnych rozwiązaniach, jakie widzisz w innych odpowiedziach tutaj, ale pozwalają na znacznie większą elastyczność. Możesz przeczytać o tym wszystko na tym blogu , a projekt github tutaj .
Oto przykład zastosowania tych narzędzi. Umieść wszystkie pliki czcionek w
assets/fonts/
. Następnie zadeklaruj te czcionki w pliku xml (np.res/xml/fonts.xml
) I załaduj ten plik na wczesnym etapie aplikacjiTypefaceManager.initialize(this, R.xml.fonts);
(np. W onCreate klasy Application). Plik xml wygląda następująco:Teraz możesz używać tych czcionek w swoim stylu lub XML (pod warunkiem, że używasz narzędzi, o których wspomniałem powyżej), używając niestandardowego elementu interfejsu użytkownika
com.innovattic.font.FontTextView
w swoim układzie XML. Poniżej możesz zobaczyć, jak możesz zastosować czcionkę do wszystkich tekstów w całej aplikacji, po prostu edytującres/values/styles.xml
:Z towarzyszącymi
res/layout/layout.xml
:Nie zapomnij zastosować motywu w swoim manifeście Androida.
źródło
Chciałbym dodać uwagę do świetnego rozwiązania
leocadiotine
. Jest doskonały, ale podczas korzystania z tego niestandardowego TextView wiele razy spowalnia aplikację, ponieważ musi ona uzyskiwać dostęp do zasobów za każdym razem, gdy tworzony jest widok tekstu. Proponuję użyć czegoś takiego jakView Holder pattern
wAdapters
, napisałem przykład:W ten sposób aplikacja uzyskuje dostęp do zasobów tylko raz dla każdego zasobu i zachowuje je w pamięci na dalsze potrzeby.
źródło
Nie wiem, czy zmienia to całą aplikację, ale udało mi się zmienić niektóre komponenty, których nie można by zmienić w inny sposób:
źródło
Informacje krok po kroku znalazłem pod tym linkiem, link: https://github.com/jaydipumaretiya/CustomTypeface/
Istnieje wiele sposobów prawidłowego używania kroju pisma w systemie Android, musisz umieścić plik kroju pisma w folderze zasobów bezpośrednio w głównym folderze i możesz go używać w czasie wykonywania.
Innym najprostszym sposobem jest użycie domyślnej biblioteki do ustawienia kroju pisma w pliku xml. Wolę tę niestandardową bibliotekę krojów pisma, aby ustawić krój czcionki na TextView, EditText, Button, CheckBox, RadioButton i AutoCompleteTextView i inne narzędzia w systemie Android.
źródło
Android 8.0 (poziom API 26) wprowadza nową funkcję Czcionki w XML Możesz utworzyć plik fontfamily i ustawić go w styles.xml.
Źródło: czcionki w XML
źródło