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?
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?
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.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:
Buat styles.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyTheme" parent="android:Theme">
<item name="android:textViewStyle">@style/MyTextViewStyle</item>
</style>
<style name="MyTextViewStyle" parent="android:Widget.TextView">
<item name="android:textColor">#F00</item>
<item name="android:textStyle">bold</item>
</style>
</resources>
Kemudian terapkan tema itu ke aplikasi Anda di AndroidManifest.xml:
<application […] android:theme="@style/MyTheme">…
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.
<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
<item name="android:textViewStyle">@style/MyTextViewStyle</item>sana juga, cukup dengan menunjuk ke default ActionBar (atau yang serupa)
Ada dua cara untuk melakukannya:
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:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyRedTheme" parent="android:Theme.Light">
<item name="android:textAppearance">@style/MyRedTextAppearance</item>
</style>
<style name="MyRedTextAppearance" parent="@android:style/TextAppearance">
<item name="android:textColor">#F00</item>
<item name="android:textStyle">bold</item>
</style>
</resources>
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"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
style="@style/MyRedTheme"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="This is red, isn't it?"
/>
</LinearLayout>
Untuk referensi lebih lanjut, Anda dapat membaca artikel ini: Memahami Tema dan Gaya Android
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:
import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.widget.TextView;
public class RedTextView extends TextView{
public RedTextView(Context context, AttributeSet attrs) {
super(context, attrs);
setTextColor(Color.RED);
}
}
Kemudian, Anda hanya perlu memperlakukannya seperti biasa TextViewdalam file XML Anda:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<org.example.RedTextView
android: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.
custom_view_layout.xmlfile yang digunakan untuk memekarkan kelas khusus?
Untuk warna teks default di TextView, setel android:textColorTertiarytema Anda ke warna yang diinginkan:
<item name="android:textColorTertiary">@color/your_text_color</item>
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.