Saya mencoba mengerjakan yang baru TabLayout
dari perpustakaan desain android.
Saya ingin mengubah teks tab menjadi font khusus . Dan, saya mencoba mencari beberapa gaya yang berhubungan dengan TabLayout
, tetapi akhirnya sampai pada ini .
Harap memandu bagaimana saya bisa mengubah font teks tab.
android
fonts
android-design-library
android-fonts
android-tablayout
Perahu nelayan
sumber
sumber
Jawaban:
Buat TextView dari Kode Java atau XML seperti ini
Pastikan untuk menyimpan ID seperti di sini karena TabLayout memeriksa ID ini jika Anda menggunakan textview kustom
Kemudian dari kode
Typeface
perbesar tata letak ini dan setel kustom pada textview itu dan tambahkan tampilan kustom ini ke tabsumber
tabTextColor
dantabSelectedTextColor
properti dalam situasi ini?Jika Anda menggunakan
TabLayout
dan ingin mengubah font, Anda harus menambahkan loop for baru ke solusi sebelumnya seperti ini:Silakan merujuk untuk mengubah gaya font di tab bilah tindakan menggunakan sherlock
sumber
TabLayout
setTypeFace
adalah aTypeFace
, jika Anda tidak dapat menemukanFont
kelas (yang tampaknya tidak ada untuk saya)Buat gaya kustom Anda sendiri dan gunakan gaya induk sebagai
parent="@android:style/TextAppearance.Widget.TabWidget"
Dan dalam tata letak tab Anda, gunakan gaya ini sebagai
app:tabTextAppearance="@style/tab_text"
Contoh: Gaya:
Contoh: Komponen tata letak tab:
sumber
parent="TextAppearance.Design.Tab"
dalam kasus saya.TextAppearance.Widget.TabWidget
. Jawaban @Javatar memperbaikinya untuk saya.Jawaban bagus dari Praveen Sharma. Hanya sedikit tambahan: Daripada menggunakan di
changeTabsFont()
mana pun Anda butuhkanTabLayout
, Anda dapat menggunakan milik Anda sendiriCustomTabLayout
.Dan satu hal lagi.
TabView
adalahLinearLayout
denganTextView
dalam (dapat juga berisi opsionalImageView
). Jadi Anda dapat membuat kode lebih sederhana:Tetapi saya tidak akan merekomendasikan cara ini. Jika
TabLayout
implementasi akan berubah, kode ini dapat bekerja tidak semestinya atau bahkan crash.Cara lain untuk menyesuaikan
TabLayout
adalah menambahkan tampilan kustom ke dalamnya. Inilah contoh yang bagus .sumber
addTab(Tab tab, int position, boolean setSelected)
bukanaddTab(Tab tab)
.Untuk menggunakan dukungan font dalam
XML
fitur pada perangkat yang menjalankanAndroid 4.1
(API level 16) dan lebih tinggi, gunakan Support Library 26+.myfont.ttf
file Anda di folder font yang baru dibuatDi
res/values/styles.xml
tambahkan:Pada file tata letak, tambahkan aplikasi: tabTextAppearance = "@ style / customfontstyle",
Silakan lihat [font dalam xml]. ( Https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml )
sumber
Metode berikut akan mengubah font secara keseluruhan
ViewGroup
secara rekursif. Saya memilih metode ini karena Anda tidak perlu peduli dengan struktur dalamTabLayout
. Saya menggunakan perpustakaan Kaligrafi untuk mengatur font.sumber
Untuk dukungan desain 23.2.0, menggunakan setupWithViewPager, Anda harus memindahkan kode dari addTab (Tab tab) ke addTab (Tab tab, boolean setSelected).
sumber
Anda dapat menggunakan ini, ini berhasil untuk saya.
sumber
Yah, saya merasa sederhana di 23.4.0 tanpa menggunakan loop. Timpa saja addTab (tab Tab @NonNull, boolean setSelected) seperti yang disarankan oleh @ejw.
Dan ini XML-nya
Semoga bisa membantu :)
sumber
android:textColor="@color/graylove"
harus memiliki pemilih daftar negara untuk itu dengan warna state_selected ditentukanSaat Andrei menjawab, Anda dapat mengubah fontface dengan memperluas kelas TabLayout . Dan seperti yang dikatakan Penzzz , Anda tidak dapat melakukannya dengan metode addTab . Ganti metode onLayout seperti di bawah ini:
Harus Menimpa metode onLayout, karena, saat Anda menggunakan metode setupWithViewPager untuk mengikat TabLayout dengan ViewPager, Anda harus menyetel teks tab baik dengan metode setText atau di PagerAdapter setelah itu dan ketika ini terjadi, metode onLayout dipanggil pada ViewGroup induk ( TabLayout) dan itulah tempat untuk meletakkan pengaturan fontface. (Mengubah teks TextView menyebabkan memanggil metode onLayout dari induknya - TabView memiliki dua anak, satu adalah ImageView dan yang lainnya adalah TextView)
Solusi Lain:
Pertama, baris kode berikut:
Dalam solusi di atas, harus ditulis di luar dua loop.
Tetapi solusi yang lebih baik untuk API> = 16 adalah menggunakan android: fontFamily :
Buat Direktori Sumber Daya Android bernama font dan salin font yang Anda inginkan ke direktori.
Kemudian gunakan gaya ini:
sumber
onLayout()
dipanggil dengan setiap perubahan tata letak seperti peralihan tab atau bahkan daftar gulir di bawah tab, dengan bersarangfor
di banyakTabLayout
aplikasi tab akan menjadi lamban.onLayout()
memang dipanggil beberapa kali ketika beralih tab (tidak yakin mengapa tepatnya), tetapi untuk memperhitungkan ini saya hanya mengatur font ketikaboolean changed
benar. Melakukan itu mencegah pengaturan font beberapa kali.Metode Resolve saya seperti ini, ubah teks tab Tertentu,
sumber
sumber
Ekstensi Kotlin yang berhasil untuk saya:
sumber
2p saya, Kotlin dengan pemeriksaan referensi, berlaku di mana saja karena akan berhenti jika ada yang salah.
sumber
Dan inilah implementasi saya di Kotlin yang juga memungkinkan perubahan font untuk tab yang dipilih dan tidak dipilih.
di attrs.xml:
sumber
Dengan fungsi ekstensi kotlin gunakan ini:
}
sumber
Perubahan
if (tabViewChild instanceof TextView) {
untuk
untuk membuatnya berfungsi dengan android.support.design.widget.TabLayout (setidaknya dari com.android.support:design:23.2.0)
sumber