Saya perlu menggunakan font tertentu untuk seluruh aplikasi saya. Saya memiliki file .ttf untuk hal yang sama. Apakah mungkin untuk menetapkan ini sebagai font default, saat aplikasi dihidupkan dan kemudian menggunakannya di tempat lain dalam aplikasi? Saat diatur, bagaimana cara menggunakannya di tata letak XML saya?
java
android
android-fonts
Samuh
sumber
sumber
Jawaban:
Ya dengan refleksi. Ini berfungsi ( berdasarkan jawaban ini ):
(Catatan: ini adalah solusi karena kurangnya dukungan untuk font khusus, jadi jika Anda ingin mengubah situasi ini, silakan beri tanda bintang untuk memperbarui masalah android di sini ). Catatan: Jangan tinggalkan komentar "saya juga" tentang masalah itu, semua orang yang melihatnya mendapat email saat Anda melakukannya. Jadi tolong beri "bintang" saja.
Anda kemudian perlu membebani beberapa font default, misalnya di kelas aplikasi :
Atau tentu saja jika Anda menggunakan file font yang sama, Anda dapat meningkatkan ini untuk memuatnya sekali saja.
Namun saya cenderung hanya menimpa satu, katakanlah
"MONOSPACE"
, kemudian mengatur gaya untuk memaksa aplikasi font typeface yang luas:API 21 Android 5.0
Saya telah menyelidiki laporan dalam komentar yang tidak berfungsi dan tampaknya tidak sesuai dengan tema
android:Theme.Material.Light
.Jika tema itu tidak penting bagi Anda, gunakan tema yang lebih lama, misalnya:
sumber
"DEFAULT_BOLD"
tetapi juga bidang pribadi:private static Typeface[] sDefaults;
Anda dapat mencoba mengakses ini dengan refleksi dan pengaturansDefaults[Typeface.ITALIC]
ke yourTypeface. Lihat ini.TextView
mana-mana untuk menggunakan font khusus atau menggunakan solusi berbasis refleksi seperti ini. Dikombinasikan dengan set font yang tersedia di android, itu membuat mengembangkan aplikasi yang tampak baik banyak kerja keras. Saya telah menambahkan permintaan fitur ke pelacak masalah android. Jika Anda ingin melihat fitur ini, Anda dapat membintangi masalah ini di sini: code.google.com/p/android/issues/…Ada perpustakaan yang bagus untuk font khusus di android: Kaligrafi
di sini adalah contoh cara menggunakannya.
di Gradle Anda harus meletakkan baris ini ke file build.gradle aplikasi Anda:
dan kemudian membuat kelas yang meluas
Application
dan menulis kode ini:dan di kelas aktivitas, tempatkan metode ini di depan onCreate:
dan hal terakhir file manifes Anda akan terlihat seperti ini:
dan itu akan mengubah seluruh aktivitas menjadi font Anda! sederhana dan bersih!
sumber
<b></b>
,<u></u>
dan<i></i>
dalamstrings.xml
file dan sejauh ini berfungsi.Meskipun ini tidak akan berfungsi untuk seluruh aplikasi, itu akan berfungsi untuk suatu Aktivitas dan dapat digunakan kembali untuk Kegiatan lainnya. Saya telah memperbarui kode saya terima kasih kepada @ FR073N untuk mendukung Tampilan lain. Saya tidak yakin tentang masalah dengan
Buttons
,RadioGroups
, dll karena orang-orang kelas semua memperpanjangTextView
sehingga mereka harus bekerja dengan baik. Saya menambahkan persyaratan boolean untuk menggunakan refleksi karena tampaknya sangat retas dan mungkin mengganggu kinerja.Catatan: seperti yang ditunjukkan, ini tidak akan berfungsi untuk konten dinamis! Untuk itu, mungkin memanggil metode ini dengan say an
onCreateView
ataugetView
metode, tetapi membutuhkan upaya tambahan.Kemudian untuk menggunakannya Anda akan melakukan sesuatu seperti ini:
Semoga itu bisa membantu.
sumber
Singkatnya:
Opsi # 1: Gunakan refleksi untuk menerapkan font (menggabungkan jawaban weston & Roger Huang ):
Penggunaan di kelas Aplikasi:
mengatur gaya untuk memaksa aplikasi jenis huruf yang lebar (berdasarkan lovefish ):
Pra-Lollipop:
Lollipop (API 21):
Option2: Subkelas masing-masing dan setiap Lihat di mana Anda perlu menyesuaikan font, yaitu. ListView, EditTextView, Tombol, dll. ( Jawaban Palani ):
Opsi 3: Terapkan View Crawler yang melintasi hierarki tampilan layar Anda saat ini:
Variasi # 1 ( jawaban Tom ):
Penggunaan:
Variasi # 2: https://coderwall.com/p/qxxmaa/android-use-a-custom-font-everywhere .
Opsi # 4: Gunakan Lib Pihak ke-3 yang disebut Kaligrafi .
Secara pribadi, saya akan merekomendasikan Opsi # 4, karena menghemat banyak sakit kepala.
sumber
"sans-serif"
innewMap.put(
, andmonospace
instyles
?! Saya ingin menggunakan font khusus yang dinamaibarana.ttf
.Saya ingin meningkatkan jawaban weston untuk API 21 Android 5.0.
Sebab
Di bawah API 21, sebagian besar gaya teks menyertakan pengaturan fontFamily, seperti:
Yang menerapkan font Roboto Regular default:
Jawaban asli gagal menerapkan font monospace, karena android: fontFamily memiliki prioritas lebih besar untuk android: atribut typeface ( referensi ). Menggunakan Theme.Holo. * Adalah solusi yang valid, karena tidak ada pengaturan android: fontFamily di dalamnya.
Larutan
Karena Android 5.0 memasukkan tipografi sistem ke dalam variabel statis Typeface.sSystemFontMap ( referensi ), kita dapat menggunakan teknik refleksi yang sama untuk menggantinya:
sumber
Button
judul s dan Tool Bar saya. Saya mengganti font default di MainApplication sebagai berikut:FontsOverride.setDefaultFont(this, "DEFAULT", "MyFontAsset.ttf");
. Saya menggunakan Nexus 5, v5.1.1Build.VERSION.SDK_INT == 21
- Itu hanya dalamAPI 21
pengujian I di Nexus dengan API 22sangat sederhana ... 1.Unduh dan letakkan font kustom Anda dalam aset..kemudian tulis satu kelas terpisah untuk tampilan teks sebagai berikut: di sini saya menggunakan font futura
}
dan lakukan hal berikut dalam xml:
sumber
Saya juga menyarankan untuk memperluas TextView dan kontrol lainnya, tetapi akan lebih baik saya mempertimbangkan untuk mengatur font dalam konstruksi.
sumber
Saya ingin meningkatkan jawaban weston dan Roger Huang untuk lebih dari API 21 Android lollipop dengan tema " Theme.AppCompat ".
Di bawah Android 4.4
Lebih dari (sama) API 5.0
Dan file util FontsOverride sama dengan apa yang ada di jawaban weston . Saya sudah menguji di ponsel ini:
Nexus 5 (Android 5.1 Sistem Android Utama)
ZTE V5 (android 5.1 CM12.1)
Catatan XIAOMI (android 4.4 MIUI6)
HUAWEI C8850 (android 2.3.5 UNKNOWN)
sumber
Solusi brilian dapat ditemukan di sini: https://coderwall.com/p/qxxmaa/android-use-a-custom-font-everywhere .
Cukup rentangkan kegiatan dari BaseActivity dan tulis metode itu. Anda juga harus mem-cache font yang lebih baik seperti yang dijelaskan di sini: https://stackoverflow.com/a/16902532/2914140 .
Setelah beberapa penelitian saya menulis kode yang bekerja di Samsung Galaxy Tab A (Android 5.0). Kode yang digunakan weston dan Roger Huang serta https://stackoverflow.com/a/33236102/2914140 . Juga diuji pada Lenovo TAB 2 A10-70L, di mana itu tidak berfungsi. Saya memasukkan font 'Sans Komik' di sini untuk melihat perbedaan.
Untuk menjalankan kode di seluruh aplikasi Anda harus menulis di beberapa kelas seperti Aplikasi berikut ini:
Buat folder 'font' di dalam 'aset' dan letakkan font yang diperlukan di sana. Instruksi sederhana dapat ditemukan di sini: https://stackoverflow.com/a/31697103/2914140 .
Perangkat Lenovo juga mendapatkan nilai jenis huruf yang salah. Di sebagian besar waktu itu mengembalikan Typeface.NORMAL, kadang-kadang nol. Bahkan jika TextView dicetak tebal (dalam tata letak file xml). Lihat di sini: TextView isBold selalu mengembalikan NORMAL . Dengan cara ini teks pada layar selalu dalam font biasa, tidak dicetak tebal atau miring. Jadi saya pikir itu adalah bug dari produser.
sumber
Bekerja untuk Xamarin. Android:
Kelas:
Implementasi Aplikasi:
Gaya:
sumber
Pada Android O ini sekarang mungkin untuk menentukan langsung dari XML dan bug saya sekarang ditutup!
Lihat di sini untuk detailnya
TL; DR:
Pertama, Anda harus menambahkan font Anda ke proyek
Kedua, Anda menambahkan keluarga font, seperti:
Terakhir, Anda dapat menggunakan font dalam tata letak atau gaya:
Nikmati!
sumber
Anda dapat mengatur font khusus untuk setiap tata letak satu per satu, hanya dengan satu panggilan fungsi dari setiap tata letak dengan melewatkan root view-nya. Pertama, buat pendekatan singelton untuk mengakses objek font seperti ini
Anda dapat mendefinisikan berbagai font di kelas di atas, Sekarang Tentukan font Helper class yang akan menerapkan font:
Dalam kode di atas, saya menerapkan font pada textView dan EditText saja, Anda dapat menerapkan font pada elemen tampilan lain juga dengan cara yang sama. Anda hanya perlu meneruskan id dari grup Tampilan root Anda ke metode font berlaku di atas. misalnya tata letak Anda adalah:
Di Above Layout, id induk root adalah "Induk Utama" sekarang mari kita terapkan font
Bersulang :)
sumber
Saya akan menyarankan memperluas TextView, dan selalu menggunakan TextView kustom Anda dalam layout XML Anda atau di mana pun Anda membutuhkan TextView. Di TextView khusus Anda, timpa
setTypeface
sumber
Solusi Tom bekerja dengan baik, tetapi hanya bekerja dengan TextView dan EditText.
Jika Anda ingin menutupi sebagian besar tampilan (RadioGroup, TextView, Checkbox ...), saya membuat metode melakukan itu:
Metode ini akan mendapatkan kembali gaya tampilan yang ditetapkan dalam XML (tebal, miring ...) dan menerapkannya jika ada.
Untuk ListView, saya selalu membuat adaptor, dan saya mengatur font di dalam getView.
sumber
Saya menulis sebuah kelas yang menetapkan jenis huruf ke tampilan dalam hierarki tampilan saat ini dan berdasarkan pada properti jenis huruf saat ini (tebal, normal, Anda dapat menambahkan gaya lain jika Anda mau):
Sekarang di semua fragmen di onViewCreated atau onCreateView, di semua aktivitas di onCreate, dan di semua adaptor tampilan di getView atau newView, panggil saja:
sumber
di api 26 dengan build.gradle 3.0.0 dan lebih tinggi Anda dapat membuat direktori font di res dan menggunakan baris ini dalam gaya Anda
untuk perubahan build.gradle gunakan ini di dependecies build.gradle Anda
sumber
item
saja tidak mengatur font untuk seluruh aplikasi. ada petunjuk?Akhirnya, Google menyadari beratnya masalah ini (menerapkan font khusus untuk komponen UI) dan mereka menemukan solusi bersih untuknya.
Pertama, Anda perlu memperbarui untuk mendukung perpustakaan 26+ (Anda mungkin juga perlu memperbarui gradle {4.0+} Anda, studio android), kemudian Anda dapat membuat folder sumber daya baru yang disebut font. Dalam folder ini, Anda dapat meletakkan sumber daya font Anda (.tff, ...). Maka Anda perlu mengganti aplikasi default mereka dan memaksa font khusus Anda ke dalamnya :)
Catatan: jika Anda ingin mendukung perangkat dengan API lebih lama dari 16, Anda harus menggunakan namespace aplikasi alih-alih android!
sumber
Saya juga ingin meningkatkan jawaban weston untuk API 21 Android 5.0.
Saya memiliki masalah yang sama pada Samsung S5 saya, ketika menggunakan font DEFAULT. (dengan font lain berfungsi dengan baik)
Saya berhasil membuatnya bekerja dengan mengatur jenis huruf ("sans" misalnya) dalam file XML, untuk setiap Textview atau Tombol
dan di Kelas Aplikasi Saya:
Semoga ini bisa membantu.
sumber
Ini solusi tidak bekerja dengan benar dalam beberapa situasi.
Jadi saya memperpanjangnya:
FontsReplacer.java
https://gist.github.com/orwir/6df839e3527647adc2d56bfadfaad805
sumber
Kaligrafi berfungsi dengan baik, tetapi tidak cocok untuk saya, karena tidak mendukung bobot yang berbeda (tebal, miring, dll) untuk font-family.
Jadi saya mencoba Fontain , yang memungkinkan Anda untuk menentukan Tampilan kustom dan menerapkannya keluarga font kustom.
untuk menggunakan Fontain, Anda harus menambahkan yang berikut ke build.gradle modul aplikasi Anda:
Kemudian, alih-alih menggunakan TextView biasa, Anda harus menggunakan FontTextView
Contoh FontTextView dengan konten huruf besar dan tebal:
sumber
sumber
TextView
sUntuk mengubah keluarga font default dari TextViews, ganti textViewStyle di tema aplikasi Anda.
Untuk menggunakan font khusus di fontFamily, gunakan sumber daya font yang ada di perpustakaan dukungan.
Fitur ini ditambahkan di Android 26 tetapi di-backport ke versi yang lebih lama melalui supportlib.
https://developer.android.com/guide/topics/resources/font-resource.html https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml.html # using-support-lib
sumber
Sejak rilis Android Oreo dan perpustakaan pendukungnya (26.0.0), Anda dapat melakukan ini dengan mudah. Lihat jawaban ini dalam pertanyaan lain.
Pada dasarnya gaya akhir Anda akan terlihat seperti ini:
sumber
Saya menemukan campuran kaligrafi 3 perpustakaan dan posting coderwall sebagai hasil akhir saya.
sumber
Ya, dimungkinkan untuk mengatur font ke seluruh aplikasi.
Cara termudah untuk mencapai ini adalah mengemas font yang diinginkan dengan aplikasi Anda.
Untuk melakukan ini, cukup buat aset / folder di root proyek, dan letakkan font Anda (dalam bentuk TrueType, atau TTF) di aset.
Anda mungkin, misalnya, membuat aset / font / dan meletakkan file TTF Anda di sana.
sumber