Saya ingin menggunakan font khusus untuk aplikasi android saya yang saya buat.
Saya dapat mengubah jenis huruf setiap objek dari Code secara individual, tetapi saya memiliki ratusan.
Begitu,
- Apakah ada cara untuk melakukan ini dari XML? [Menyetel jenis huruf khusus]
- Apakah ada cara untuk melakukannya dari kode di satu tempat, untuk mengatakan bahwa seluruh aplikasi dan semua komponen harus menggunakan jenis huruf kustom, bukan yang default?
Jawaban:
Tidak, maaf. Anda hanya dapat menentukan tipografi bawaan melalui XML.Aku tidak menyadarinya.Ada berbagai opsi untuk ini saat ini:
Sumber daya font dan backport di Android SDK, jika Anda menggunakan
appcompat
Pustaka pihak ketiga untuk mereka yang tidak menggunakan
appcompat
, meskipun tidak semua akan mendukung pendefinisian font di sumber tata letaksumber
Ya itu mungkin.
Anda harus membuat tampilan kustom yang memperluas tampilan teks.
Di
attrs.xml
dalamvalues
folder:Masuk
main.xml
:Masuk
MyTextView.java
:sumber
TextView
. Ini akan membutuhkan subclass khusus untuk setiap kelas widget yang mewarisi dariTextView
mana kemampuan yang sama diinginkan.Saya melakukan ini dengan cara yang lebih "brute force" yang tidak memerlukan perubahan pada layout xml atau Activities.
Diuji pada Android versi 2.1 hingga 4.4. Jalankan ini saat memulai aplikasi, di kelas Aplikasi Anda:
Untuk contoh yang lebih lengkap, lihat http://github.com/perchrh/FontOverrideExample
sumber
code
<style name = "AppTheme" parent = "AppBaseTheme"> <item name = "android: typeface"> monospace </item> </style>,code
ini berfungsi tetapi tidak untuk huruf tebal. saya menambahkan kode ini di kelas yang memperluas Aplikasi. apakah itu tempat yang benar? @ P-chanMeskipun saya meningkatkan jawaban Manish sebagai metode tercepat dan paling bertarget, saya juga telah melihat solusi naif yang hanya berulang secara rekursif melalui hierarki tampilan dan memperbarui tipografi semua elemen secara bergantian. Sesuatu seperti ini:
Anda perlu memanggil fungsi ini pada tampilan Anda baik setelah memekarkan tata letak dan dalam
onContentChanged()
metode Aktivitas Anda .sumber
Saya bisa melakukan ini secara terpusat, inilah hasilnya:
Saya telah mengikuti
Activity
dan saya memperpanjang darinya jika saya membutuhkan font khusus:Tetapi jika saya menggunakan aktivitas dari paket dukungan misalnya,
FragmentActivity
maka saya menggunakan iniActivity
:Saya belum menguji kode ini dengan
Fragment
s, tapi semoga bisa berhasil.My
FontUtils
is simple yang juga memecahkan masalah pra-ICS yang disebutkan di sini https://code.google.com/p/android/issues/detail?id=9904 :sumber
Hai, saya juga membutuhkan 2 font berbeda di aplikasi saya untuk widget berbeda! Saya menggunakan cara ini:
Di kelas Aplikasi saya, saya membuat metode statis:
Jenis huruf String mewakili xyz.ttf di folder aset. (Saya membuat Kelas Konstanta) Sekarang Anda dapat menggunakan ini di mana saja di aplikasi Anda:
Satu-satunya masalah adalah, Anda memerlukan ini untuk setiap widget di mana Anda ingin menggunakan Font! Tapi saya pikir ini cara terbaik.
sumber
Menggunakan saran pospi dan bekerja dengan properti 'tag' seperti yang dilakukan Richard , saya membuat kelas khusus yang memuat font khusus saya dan menerapkannya ke tampilan sesuai dengan tag mereka.
Jadi pada dasarnya, alih-alih menyetel TypeFace dalam atribut android: fontFamily Anda menggunakan android: tag attritube dan menyetelnya ke salah satu enum yang ditentukan.
Dalam Aktivitas atau Fragmen Anda baru saja menelepon
sumber
Saya menemukan solusi yang bagus di blog Lisa Wray . Dengan data binding yang baru, dimungkinkan untuk menyetel font di file XML Anda.
Dalam XML:
sumber
Saya pikir ada cara yang lebih praktis untuk melakukannya. Kelas berikut akan menyetel wajah tipe khusus untuk semua komponen aplikasi Anda (dengan setelan per kelas).
sumber
Implementasi default LayoutInflater tidak mendukung penentuan jenis huruf font dari xml. Namun saya telah melihatnya dilakukan di xml dengan menyediakan pabrik kustom untuk LayoutInflater yang akan mengurai atribut tersebut dari tag xml.
Struktur dasarnya akan seperti ini.
Artikel ini memberikan penjelasan yang lebih mendalam tentang mekanisme ini dan bagaimana penulis mencoba memberikan dukungan tata letak xml untuk tipografi dengan cara ini. Kode untuk implementasi penulis dapat ditemukan di sini .
sumber
Mengatur font khusus menjadi ProgressDialog / AlertDialog biasa:
sumber
Ya, itu dimungkinkan dengan mengganti jenis huruf default. Saya mengikuti solusi ini dan itu bekerja seperti pesona untuk semua TextView dan teks ActionBar juga dengan satu perubahan.
styles.xml
Alih-alih themes.xml seperti yang disebutkan dalam tautan di atas, saya menyebutkan font default untuk diganti di styles.xml saya di tag tema aplikasi default saya. Jenis huruf default yang dapat ditimpa adalah serif, sans, monospace, dan normal.
TypefaceUtil.java
Awalnya, saya tidak tahu tipografi yang akan ditimpa adalah tetap dan kumpulan nilai yang ditentukan tetapi akhirnya membantu saya memahami bagaimana Android menangani font dan tipografi dan nilai defaultnya, yang merupakan sudut pandang yang berbeda.
sumber
Saya tidak tahu apakah itu mengubah seluruh aplikasi, tetapi saya telah berhasil mengubah beberapa komponen yang tidak dapat diubah dengan melakukan ini:
sumber
Saya suka saran pospi. Mengapa tidak pergi semua menggunakan properti 'tag' dari sebuah tampilan (yang bisa Anda tentukan di XML - 'android: tag') untuk menentukan gaya tambahan yang tidak bisa Anda lakukan di XML. Saya suka JSON jadi saya akan menggunakan string JSON untuk menentukan kumpulan kunci / nilai. Kelas ini melakukan tugasnya - panggil saja
Style.setContentView(this, [resource id])
aktivitas Anda.Jelas Anda ingin menangani lebih dari sekedar jenis huruf agar menggunakan JSON bermanfaat.
Manfaat dari properti 'tag' adalah Anda dapat mengaturnya pada gaya dasar yang Anda gunakan sebagai tema dan dengan demikian menerapkannya ke semua tampilan Anda secara otomatis. EDIT: Melakukan ini menyebabkan crash selama inflasi di Android 4.0.3. Anda masih dapat menggunakan gaya dan menerapkannya ke tampilan teks satu per satu.
Satu hal yang akan Anda lihat di kode - beberapa tampilan memiliki tag tanpa satu pun yang disetel secara eksplisit - anehnya itu adalah string 'Αποκοπή' - yang 'dipotong' dalam bahasa Yunani, menurut google translate! Apa apaan...?
sumber
Jawaban @ majinboo direvisi untuk kinerja dan manajemen memori. Lebih dari satu font membutuhkan Aktivitas terkait dapat menggunakan kelas Font ini dengan memberikan konstruktor itu sendiri sebagai parameter.
Kelas Font yang direvisi adalah sebagai berikut:
sumber
Bekerja untuk Xamarin. Android:
Kelas:
Implementasi Aplikasi:
Gaya:
sumber
Sepertinya penggunaan font khusus telah dipermudah dengan Android O, pada dasarnya Anda dapat menggunakan xml untuk melakukannya. Saya telah melampirkan tautan ke dokumentasi resmi Android untuk referensi, dan semoga ini akan membantu orang-orang yang masih membutuhkan solusi ini. Bekerja dengan font khusus di Android
sumber
Mungkin berguna untuk mengetahui bahwa mulai dari Android 8.0 (API level 26) Anda bisa menggunakan font khusus dalam XML .
Sederhananya, Anda bisa melakukannya dengan cara berikut.
Letakkan font di folder tersebut
res/font
.Baik menggunakannya dalam atribut widget
<Button android:fontFamily="@font/myfont"/>
atau masukkan
res/values/styles.xml
dan menggunakannya sebagai gaya
sumber
Gunakan atribut "fontPath" secara langsung di file xml.
untuk digunakan dalam style.xml
<item name = "fontPath"> font / ProximaNovaSemibold.ttf </item>
untuk digunakan dalam file tata letak langsung
fontPath = "font / ProximaNovaBold.ttf"
(Catatan: Tidak perlu menggunakan atribut app / android di awalan)
sumber
Sangat mungkin. Banyak cara untuk melakukannya. Cara tercepat, buat kondisi dengan metode coba-tangkap .. coba kondisi gaya font tertentu Anda, tangkap kesalahannya, dan tentukan gaya font lainnya.
sumber