Saya mencoba mendefinisikan tata letak GUI menggunakan file XML di Android. Sejauh yang saya tahu, tidak ada cara untuk menentukan bahwa widget Anda harus menggunakan font khusus (misalnya yang Anda tempatkan di aset / font /) dalam file XML dan Anda hanya dapat menggunakan font yang diinstal sistem.
Saya tahu bahwa, dalam kode Java, saya dapat mengubah font setiap widget secara manual menggunakan ID unik. Atau, saya bisa mengulangi semua widget di Jawa untuk melakukan perubahan ini, tetapi ini mungkin akan sangat lambat.
Opsi apa lagi yang saya miliki? Apakah ada cara yang lebih baik untuk membuat widget yang memiliki tampilan khusus? Saya khususnya tidak ingin harus mengubah font secara manual untuk setiap widget baru yang saya tambahkan.
Jawaban:
Anda dapat memperluas TextView untuk mengatur font khusus seperti yang saya pelajari di sini .
TextViewPlus.java:
attrs.xml: (dalam resolusi / nilai)
main.xml:
Anda akan memasukkan "saxmono.ttf" di folder aset .
PEMBARUAN 8/1/13
Ada masalah memori serius dengan metode ini. Lihat komentar chedabob di bawah ini.
sumber
xmlns:foo="http://schemas.android.com/apk/res/com.example
Saya terlambat 3 tahun untuk pesta :( Namun ini bisa berguna bagi seseorang yang mungkin menemukan posting ini.
Saya telah menulis perpustakaan yang menyimpan cache Typefaces dan juga memungkinkan Anda untuk menentukan tipografi khusus langsung dari XML. Anda dapat menemukan perpustakaan di sini .
Berikut ini tampilan tata letak XML Anda, saat Anda menggunakannya.
sumber
compile 'com.mobsandgeeks:android-typeface-textview:1.0'
tetapi itu tidak berhasil.xmlns:geekui="http://schemas.android.com/apk/res-auto"
Ini mungkin agak terlambat, tetapi Anda perlu membuat kelas tunggal yang mengembalikan jenis huruf kustom untuk menghindari kebocoran memori.
Kelas TypeFace:
Tampilan Teks Khusus:
Dengan xml:
Secara terprogram:
sumber
Pertanyaan lama, tapi saya harap saya membaca jawaban ini di sini sebelum saya memulai pencarian saya sendiri untuk solusi yang baik. Kaligrafi memperluas
android:fontFamily
atribut untuk menambahkan dukungan untuk font khusus di folder aset Anda, seperti:Satu-satunya hal yang harus Anda lakukan untuk mengaktifkannya adalah melampirkannya pada Konteks Aktivitas yang Anda gunakan:
Anda juga dapat menentukan atribut khusus Anda sendiri untuk diganti
android:fontFamily
Ini juga berfungsi dalam tema, termasuk AppTheme.
sumber
Menggunakan DataBinding :
Dalam XML:
file font harus dalam
assets/fonts/
sumber
Jika Anda hanya memiliki satu jenis huruf yang ingin Anda tambahkan, dan ingin lebih sedikit kode untuk ditulis, Anda dapat membuat TextView khusus untuk font spesifik Anda. Lihat kode di bawah ini.
Di main.xml, Anda sekarang dapat menambahkan textView Anda seperti ini:
sumber
Cara terbaik untuk melakukannya Dari rilis pratinjau Android O adalah dengan cara ini
1.) Klik kanan folder res dan buka New> Android resource directory . Jendela New
Resource Directory muncul.
2.) Di daftar Tipe sumber daya, pilih font , lalu klik OK.
3.) Tambahkan file font Anda di folder font . Struktur folder di bawah ini menghasilkan R.font.dancing_script, R.font.la_la, dan R.font.ba_ba.
4.) Klik dua kali file font untuk melihat dulu font file dalam editor.
Selanjutnya kita harus membuat keluarga font
1.) Klik kanan folder font dan pergi ke New> File sumber daya font . Jendela File Sumber Daya Baru muncul.
2.) Masukkan nama file, lalu klik OK . Sumber daya font baru XML terbuka di editor.
3.) Lampirkan setiap file font, style, dan atribut weight dalam elemen tag font. XML berikut ini mengilustrasikan penambahan atribut terkait font di XML sumber daya font:
Menambahkan font ke TextView:
Seperti dari dokumentasi
semua langkah sudah benar.
sumber
Perluas
TextView
dan berikan atribut khusus atau gunakan saja atribut android: tag untuk meneruskan String dari font apa yang ingin Anda gunakan. Anda harus memilih konvensi dan tetap menggunakannya seperti saya akan meletakkan semua font saya di folder res / assets / fonts / sehingga kelas TextView Anda tahu di mana menemukannya. Kemudian di konstruktor Anda, Anda cukup mengatur font secara manual setelah panggilan super.sumber
Satu-satunya cara untuk menggunakan font khusus adalah melalui kode sumber.
Ingat saja bahwa Android berjalan pada perangkat dengan sumber daya dan font yang sangat terbatas mungkin memerlukan jumlah RAM yang baik. Font Droid bawaan dibuat secara khusus dan, jika Anda perhatikan, ada banyak karakter dan dekorasi yang hilang.
sumber
Saya mungkin punya jawaban sederhana untuk pertanyaan tanpa memperpanjang TextView dan mengimplementasikan kode panjang.
Kode:
Tempatkan file font khusus di folder aset seperti biasa dan coba ini. Ini bekerja untuk saya. Saya hanya tidak mengerti mengapa peter memberikan kode yang begitu besar untuk hal sederhana ini atau dia telah memberikan jawabannya dalam versi lama.
sumber
Juga dapat didefinisikan dalam xml tanpa membuat kelas khusus
style.xml
activity_main.xml
Catatan singkat, karena saya selalu lupa di mana harus meletakkan font, itu font yang harus di dalam
assets
dan folder ini berada di tingkat yang sama itures
dansrc
, dalam kasus saya iniassets/fonts/ionicons.ttf
Diperbarui Menambahkan tata letak root karena metode ini perlu
xmlns:app="http://schemas.android.com/apk/res-auto"
bekerjaPerbarui 2 Lupa tentang perpustakaan yang telah saya instal sebelumnya bernama Kaligrafi
sumber
xmlns:app="http://schemas.android.com/apk/res-auto"
ke tata letak root Anda, periksa juga jawaban yang diperbaruiJawaban Peter adalah yang terbaik, tetapi dapat ditingkatkan dengan menggunakan styles.xml dari Android untuk menyesuaikan font Anda untuk semua tampilan teks di aplikasi Anda.
Kode saya ada di sini
sumber
Ada dua cara untuk menyesuaikan font:
!!! font khusus saya di aset / fonts / iran_sans.ttf
Cara 1: Refreksi Typeface.class ||| Cara terbaik
panggil FontsOverride.setDefaultFont () di kelas memperluas Aplikasi, Kode ini akan menyebabkan semua font perangkat lunak diubah, bahkan font Toasts
AppController.java
FontsOverride.java
Cara 2: gunakan setTypeface
untuk tampilan khusus panggil saja setTypeface () untuk mengubah font.
CTextView.java
FontUtils.java
sumber
Berikut ini adalah tutorial yang menunjukkan kepada Anda cara menyiapkan font khusus seperti yang dijelaskan @peter: http://responsiveandroid.com/2012/03/15/custom-fonts-in-android-widgets.html
itu juga memiliki pertimbangan untuk kebocoran memori potensial ala http://code.google.com/p/android/issues/detail?id=9904 . Juga dalam tutorial adalah contoh untuk mengatur font khusus pada tombol.
sumber
Anda dapat membuat kelas tampilan teks dengan mudah: -
Jadi apa yang perlu Anda lakukan pertama, buat
Custom textview
kelas yang diperluasAppCompatTextView
.Sekarang, setiap kali panggilan tampilan teks khusus dan kami akan mendapatkan nilai int dari atribut
int fontValue = attrs.getAttributeIntValue("http://schemas.android.com/apk/res-auto","Lato-Regular.ttf",-1)
.Atau
Kita juga bisa mendapatkan getTypeface () dari tampilan yang kita atur di xml (
android:textStyle="bold|normal|italic"
). Jadi, lakukan apa yang ingin Anda lakukan.Sekarang, kita buat
FontUtils
untuk mengatur semua font .ttf ke tampilan kita.sumber
Mungkin berguna untuk mengetahui bahwa mulai dari Android 8.0 (API level 26) Anda dapat menggunakan font khusus dalam XML .
Anda dapat menerapkan font khusus ke seluruh aplikasi dengan cara berikut.
Letakkan font di folder
res/font
.Dalam
res/values/styles.xml
menggunakannya dalam tema aplikasi.<style name="AppTheme" parent="{whatever you like}"> <item name="android:fontFamily">@font/myfont</item> </style>
sumber
Fontinator adalah Pustaka Android yang memudahkan Anda menggunakan Font khusus. https://github.com/svendvd/Fontinator
sumber
Anda tidak dapat memperluas TextView untuk membuat widget atau menggunakannya di tata letak widget: http://developer.android.com/guide/topics/appwidgets/index.html
sumber