Katakanlah saya ingin semua TextViewinstance di aplikasi saya memiliki textColor="#ffffff". Apakah ada cara untuk menyetelnya di satu tempat alih-alih menyetelnya untuk masing-masing TextView?
Sebenarnya, Anda dapat menyetel gaya default untuk TextView (dan sebagian besar widget bawaan lainnya) tanpa perlu melakukan kelas java khusus atau menyetel gaya satu per satu.
Jika Anda melihat di themes.xmlsumber Android, Anda akan melihat banyak atribut untuk gaya default untuk berbagai widget. Kuncinya adalah atribut textViewStyle(atau editTextStyle, etc.) yang Anda ganti di tema kustom Anda. Anda dapat menggantinya dengan cara berikut:
Solusi paling elegan yang saya lihat sampai sekarang.
Italo Borssatto
@Steve, jika saya menyertakan item <item name="android:textViewStyle">@style/MyTextViewStyle</item>dalam gaya Tema Saya dan kemudian menerapkan gaya ke aplikasi saya, semua milik saya TextViewakan ditampilkan sesuai dengan gayanya (bahkan nama aplikasi di bilah tindakan). Bagaimana cara memperbaiki masalah dengan bilah tindakan? Saya ingin memiliki tampilan default. Github
Maksim Dmitriev
@Steve, Cara menerapkan tema (bilah tindakan dan widget) pada aplikasi
Pratik Butani
Saya tidak yakin tentang bagaimana membedakan ActionBar dari hal-hal lain. Anda mungkin dapat menemukan di mana pun gaya ActionBar Anda disetel dan kemudian meletakkannya di <item name="android:textViewStyle">@style/MyTextViewStyle</item>sana juga, cukup dengan menunjuk ke default ActionBar (atau yang serupa)
Steve Pomeroy
@StevePomeroy ini tidak bekerja untuk saya .. dapatkah Anda memberikan beberapa Dukungan. Style saya untuk TextView tetap sama. Apakah ada Minimum item yang perlu saya atur atau ada beberapa item yang tidak boleh saya atur?
Mike
52
Ada dua cara untuk melakukannya:
1. Menggunakan gaya
Anda dapat menentukan gaya Anda sendiri dengan membuat file XML di res/valuesdirektori. Jadi, misalkan Anda ingin memiliki teks merah dan tebal, lalu Anda membuat file dengan konten ini:
Anda dapat menamainya sesuai keinginan, misalnya res/values/red.xml. Kemudian, satu-satunya hal yang harus Anda lakukan adalah menggunakan tampilan tersebut di widget yang Anda inginkan, misalnya:
<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><TextViewstyle="@style/MyRedTheme"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="This is red, isn't it?"/></LinearLayout>
Ini adalah cara lain yang mungkin untuk mencapai ini, dan itu akan menyediakan milik Anda TextViewyang mengatur warna teks selalu untuk apapun yang Anda inginkan; misalnya:
Kemudian, Anda hanya perlu memperlakukannya seperti biasa TextViewdalam file XML Anda:
<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><org.example.RedTextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="This is red, isn't it?"/></LinearLayout>
Apakah Anda menggunakan satu atau beberapa pilihan tergantung pada kebutuhan Anda. Jika satu-satunya hal yang ingin Anda lakukan adalah memodifikasi tampilan, maka pendekatan terbaik adalah yang pertama. Di sisi lain, jika Anda ingin mengubah tampilan dan menambahkan beberapa fungsionalitas baru ke widget Anda, yang kedua adalah caranya.
menggunakan kelas khusus harus lebih disukai karena itu adalah pendekatan yang lebih bersih dan membantu menjaga bobot file xml tetap ringan.
Amit Kumar
@AmitKumar Tidak, seharusnya tidak! Dalam kasus khusus ini, ini berarti menggunakan kelas kustom terpisah untuk setiap nilai atribut yang berbeda. Ini menghasilkan banyak kode yang membengkak dan membuat tata letak sebenarnya tidak dapat dibaca lagi (Anda harus mengunjungi setiap kelas untuk melihat apa yang dilakukannya, bukan hanya membaca beberapa baris xml). Kelas khusus sebaiknya hanya digunakan jika Anda mengubah perilakunya, tetapi tidak jika satu-satunya perubahan adalah tampilan tampilan.
Andre
Apakah tidak mungkin menyetel gaya tampilan kustom dari xml? Mengapa kami tidak dapat menggunakannya dalam custom_view_layout.xmlfile yang digunakan untuk memekarkan kelas khusus?
lucidbrot
5
Untuk warna teks default di TextView, setel android:textColorTertiarytema Anda ke warna yang diinginkan:
Banyak warna kontrol Android lainnya dapat dikontrol menggunakan atribut framework, atau atribut support library jika Anda menggunakan support library.
Untuk daftar atribut Anda dapat mengatur, memeriksa Android kode sumber dari styles.xmldan themes.xmlatau ini sangat membantu inti oleh Dan Lew, cobalah mengubah setiap nilai dan melihat apa yang mereka mengubah pada layar.
Terima kasih bung! Saya menghabiskan banyak waktu untuk mencari tahu mengapa textColorPrimary tidak berfungsi.
pratt
3
Tentukan gaya dan gunakan di setiap widget, tentukan tema yang menggantikan default android untuk widget itu, atau tentukan sumber daya string dan referensikan di setiap widget
Jawaban:
Sebenarnya, Anda dapat menyetel gaya default untuk TextView (dan sebagian besar widget bawaan lainnya) tanpa perlu melakukan kelas java khusus atau menyetel gaya satu per satu.
Jika Anda melihat di
themes.xml
sumber Android, Anda akan melihat banyak atribut untuk gaya default untuk berbagai widget. Kuncinya adalah atributtextViewStyle
(ataueditTextStyle
, etc.) yang Anda ganti di tema kustom Anda. Anda dapat menggantinya dengan cara berikut:Buat
styles.xml
:Kemudian terapkan tema itu ke aplikasi Anda di
AndroidManifest.xml
:Dan semua tampilan teks Anda akan default ke gaya yang ditentukan dalam
MyTextViewStyle
(dalam hal ini, tebal dan merah)!Ini telah diuji pada perangkat dari API level 4 dan seterusnya dan tampaknya berfungsi dengan baik.
sumber
<item name="android:textViewStyle">@style/MyTextViewStyle</item>
dalam gaya Tema Saya dan kemudian menerapkan gaya ke aplikasi saya, semua milik sayaTextView
akan ditampilkan sesuai dengan gayanya (bahkan nama aplikasi di bilah tindakan). Bagaimana cara memperbaiki masalah dengan bilah tindakan? Saya ingin memiliki tampilan default. Github<item name="android:textViewStyle">@style/MyTextViewStyle</item>
sana juga, cukup dengan menunjuk ke default ActionBar (atau yang serupa)Ada dua cara untuk melakukannya:
1. Menggunakan gaya
Anda dapat menentukan gaya Anda sendiri dengan membuat file XML di
res/values
direktori. Jadi, misalkan Anda ingin memiliki teks merah dan tebal, lalu Anda membuat file dengan konten ini:Anda dapat menamainya sesuai keinginan, misalnya
res/values/red.xml
. Kemudian, satu-satunya hal yang harus Anda lakukan adalah menggunakan tampilan tersebut di widget yang Anda inginkan, misalnya:Untuk referensi lebih lanjut, Anda dapat membaca artikel ini: Memahami Tema dan Gaya Android
2. Menggunakan kelas khusus
Ini adalah cara lain yang mungkin untuk mencapai ini, dan itu akan menyediakan milik Anda
TextView
yang mengatur warna teks selalu untuk apapun yang Anda inginkan; misalnya:Kemudian, Anda hanya perlu memperlakukannya seperti biasa
TextView
dalam file XML Anda:Apakah Anda menggunakan satu atau beberapa pilihan tergantung pada kebutuhan Anda. Jika satu-satunya hal yang ingin Anda lakukan adalah memodifikasi tampilan, maka pendekatan terbaik adalah yang pertama. Di sisi lain, jika Anda ingin mengubah tampilan dan menambahkan beberapa fungsionalitas baru ke widget Anda, yang kedua adalah caranya.
sumber
custom_view_layout.xml
file yang digunakan untuk memekarkan kelas khusus?Untuk warna teks default di
TextView
, setelandroid:textColorTertiary
tema Anda ke warna yang diinginkan:Banyak warna kontrol Android lainnya dapat dikontrol menggunakan atribut framework, atau atribut support library jika Anda menggunakan support library.
Untuk daftar atribut Anda dapat mengatur, memeriksa Android kode sumber dari
styles.xml
danthemes.xml
atau ini sangat membantu inti oleh Dan Lew, cobalah mengubah setiap nilai dan melihat apa yang mereka mengubah pada layar.sumber
Tentukan gaya dan gunakan di setiap widget, tentukan tema yang menggantikan default android untuk widget itu, atau tentukan sumber daya string dan referensikan di setiap widget
sumber