Saya mencoba menggunakan TextView
konstruktor dengan gaya seperti ini:
TextView myText = new TextView(MyActivity.this, null, R.style.my_style);
Namun, ketika saya melakukan ini, tampilan teks tampaknya tidak mengambil gaya (saya memverifikasi gaya dengan mengaturnya pada objek statis).
Saya juga sudah mencoba menggunakan myText.setTextAppearance(MyActivity.this, R.style.my_style)
tetapi juga tidak berhasil.
Anda dapat membuat gaya umum dan menggunakannya kembali pada beberapa tayangan teks seperti yang di bawah ini:
Sunting: ini merujuk pada Konteks
sumber
TextViewCompat.setTextAppearance
Anda bisa memberikan ContextThemeWrapper ke konstruktor seperti ini:
sumber
<style name="TabButton"><item name="android:background">@drawable/tabbar_button_bkgnd</item>...</style>
. Dan kemudian saya memanggil dengan konstruksi:new Button(new ContextThemeWrapper(context, R.style.TabButton));
. Tapi tombol itu mengabaikan pengaturan saya. Apakah saya melakukan sesuatu yang salah di sini?parent="@android:style/Widget.Button"
parent
tidak berubah sedikit pun. Jadi saya langsung sajainflate
solusinya.new Button(new ContextThemeWrapper(context, R.style.TabButton), null, 0)
. Jika tidak, gaya tombol default akan diterapkan, dan gaya ini akan menimpa gaya tombol yang telah Anda gabungkan ke dalam tema melalui ContextThemeWrapper.Anda dapat mengatur gaya dalam konstruktor (tetapi gaya tidak dapat diubah / diset secara dinamis).
View(Context, AttributeSet, int)
(int
adalah atribut dalam tema saat ini yang berisi referensi ke gaya)Jawaban dari Romain Guy
referensi
sumber
Parameter int
defStyleAttr
tidak menentukan gaya. Dari dokumentasi Android:Untuk mengatur gaya dalam View constructor kami memiliki 2 solusi yang mungkin:
Dengan menggunakan ContextThemeWrapper:
Dengan konstruktor empat argumen (tersedia mulai dari LOLLIPOP):
Hal utama untuk kedua solusi -
defStyleAttr
parameter harus 0 untuk menerapkan gaya kita ke tampilan.sumber
Mengubah gaya secara dinamis belum didukung (belum). Anda harus mengatur gaya sebelum tampilan dibuat, melalui XML.
sumber
Jawaban yang diterima adalah solusi yang bagus untuk saya. Satu-satunya hal yang ditambahkan adalah tentang
inflate()
metode.Dalam jawaban yang diterima semua
android:layout_*
parameter tidak akan diterapkan.Alasannya adalah tidak ada cara untuk menyesuaikannya, sebab
null
disahkan sebagaiViewGroup parent
.Anda bisa menggunakannya seperti ini:
View view = inflater.inflate(R.layout.view, parent, false);
dan
parent
ituViewGroup
, dari mana Anda ingin menyesuaikanandroid:layout_*
.Dalam hal ini, semua properti relatif akan ditetapkan.
Semoga bermanfaat bagi seseorang.
sumber
Saat menggunakan tampilan khusus yang mungkin menggunakan pewarisan gaya (atau atribut gaya acara), Anda harus memodifikasi konstruktor kedua agar tidak kehilangan gaya. Ini berfungsi untuk saya, tanpa perlu menggunakan setTextAppearence () :
sumber
Saya juga menemui masalah, dan saya menemukan cara untuk mengatur gaya secara pemrograman. Mungkin Anda semua membutuhkannya, Jadi saya perbarui di sana.
Param ketiga konstruktor View menerima jenis attr dalam tema Anda sebagai kode sumber di bawah ini:
Jadi, Anda harus melewati jenis R.attr. ** daripada R.style. **
Dalam kode saya, saya melakukan langkah-langkah berikut:
Pertama, sesuaikan attr kustom untuk digunakan oleh tema di attr.xml.
Kedua, spesifikkan gaya Anda di tema yang digunakan di style.xml.
Pada akhirnya, gunakan itu!
tampilan yang dibuat secara terprogram akan menggunakan gaya yang ditentukan dalam tema Anda.
Anda dapat mencoba, dan berharap ini dapat bekerja untuk Anda dengan sempurna.
sumber
Saya hanya menguji dengan EditText tetapi Anda dapat menggunakan metode ini
untuk menerapkan gaya yang ditentukan dalam file XML.
Karena metode ini milik View, saya percaya ini akan bekerja dengan elemen UI apa pun.
salam.
sumber
Kita bisa menggunakan
TextViewCompact.setTextAppearance(textView, R.style.xyz)
.Android doc untuk referensi.
sumber