Inilah XML:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/LightStyle"
android:layout_width="fill_parent"
android:layout_height="55dip"
android:clickable="true"
android:orientation="horizontal" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" />
</RelativeLayout>
Bagaimana cara mengatur style
atribut secara terprogram?
Jawaban:
Secara teknis Anda dapat menerapkan gaya secara terprogram, dengan pandangan khusus:
Konstruktor satu argumen adalah yang digunakan ketika Anda instantiate tampilan pemrograman.
Jadi rangkai konstruktor ini ke super yang mengambil parameter style.
Atau seperti yang ditunjukkan oleh @Dori:
sumber
http://developer.android.com/reference/android/widget/LinearLayout.html#LinearLayout(android.content.Context, android.util.AttributeSet, int)
. Dengan LinearLayout Level 11+ diperlukan.AttributeSet
?Button
. Pendekatan @Benjamin Piette bekerja dengan baik.Apa yang berhasil untuk saya:
DAN
sumber
Pembaruan : Pada saat menjawab pertanyaan ini (pertengahan 2012, API level 14-15), pengaturan tampilan secara terprogram bukanlah suatu pilihan (meskipun ada beberapa penyelesaian non-sepele) di mana hal ini dimungkinkan setelah API yang lebih baru rilis. Lihat jawaban @ Blundell untuk detailnya.
Jawaban LAMA:
Anda belum dapat menetapkan gaya tampilan secara terprogram, tetapi Anda dapat menemukan utas ini berguna.
sumber
textView.setTextAppearance(context, R.style.mystyle);
. Menurut dokumen "Mengatur warna teks, ukuran, gaya, warna petunjuk, dan sorot warna dari sumber daya TextAppearance yang ditentukan." developer.android.com/reference/android/widget/… , int)Untuk Tombol / TextView baru:
Untuk contoh yang ada:
Untuk Gambar atau tata letak:
sumber
Jika Anda ingin terus menggunakan XML (yang mana jawaban yang diterima tidak membiarkan Anda melakukannya) dan mengatur gaya setelah tampilan dibuat, Anda mungkin dapat menggunakan perpustakaan Paris yang mendukung subset dari semua atribut yang tersedia.
Karena Anda menggembungkan tampilan dari XML, Anda harus menentukan id di tata letak:
Kemudian ketika Anda perlu mengubah gaya pemrograman, setelah tata letak telah meningkat:
Untuk lebih lanjut: daftar jenis dan atribut tampilan yang didukung (termasuk latar belakang, lapisan, margin, dll. Dan dapat dengan mudah diperpanjang) dan petunjuk pemasangan dengan dokumentasi tambahan .
Penafian: Saya penulis asli perpustakaan tersebut.
sumber
Anda dapat menerapkan gaya pada aktivitas Anda dengan melakukan:
atau Android bawaan:
dalam aktivitas Anda, sebelumnya
setContentView()
.sumber
Tidak ada jawaban yang diberikan yang benar.
Anda BISA mengatur gaya secara pemrograman.
Jawaban singkatnya adalah lihat di http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1.1_r1/android/content/Context.java#435
Jawaban panjang. Inilah cuplikan saya untuk menetapkan gaya yang ditentukan khusus secara terprogram untuk tampilan Anda:
1) Buat gaya dalam file styles.xml Anda
Jangan lupa untuk mendefinisikan atribut khusus Anda dalam file attrs.xml
File attrsl.xml saya:
Perhatikan Anda dapat menggunakan nama apa pun untuk gaya Anda (CustomWidget saya)
Sekarang mari kita atur gaya ke widget Secara terprogram Inilah widget sederhana Saya:
tata letak:
Dan akhirnya implementasi kelas StyleLoader
Anda dapat menemukan contoh yang berfungsi penuh di https://github.com/Defuera/SetStylableProgramatically
sumber
apply
metode yang tidak menarik. Arti sebenarnya dari gaya adalah secara otomatis menerapkan beberapa gaya visual pada semua Tampilan yang ditambahkan secara dinamis di masa depan. Kode ini di sini tentu saja tidak bisa melakukan itu dan tidak ada yang dinamis di sini, kita perlu tahu apa yang dilihat dan yang sifat / ladang untuk set.Ini pertanyaan yang cukup lama tetapi solusi yang bekerja untuk saya sekarang adalah dengan menggunakan parameter konstruktor ke-4
defStyleRes
- jika tersedia .. pada tampilan ... untuk mengatur gayaPekerjaan berikut untuk tujuan saya (kotlin):
sumber
Ini adalah contoh sederhana saya, kuncinya adalah
ContextThemeWrapper
pembungkus, tanpa itu, gaya saya tidak berfungsi, dan menggunakan tiga parameter konstruktor View.sumber
cara sederhana melewati konstruktor
sumber
Saya tidak menyarankan untuk menggunakan ContextThemeWrapper karena ia melakukan ini:
Apa yang dapat membuat hasil yang tidak diinginkan dalam aplikasi Anda. Sebagai gantinya saya mengusulkan perpustakaan baru "paris" untuk ini dari para insinyur di Airbnb:
https://github.com/airbnb/paris
Tetapi setelah beberapa waktu menggunakannya saya menemukan itu sebenarnya sangat terbatas dan saya berhenti menggunakannya karena tidak mendukung banyak properti yang saya butuhkan di luar kotak, jadi kita harus memeriksa dan memutuskan seperti biasa.
sumber
Saya menggunakan tampilan yang didefinisikan dalam XML dalam ViewGroup komposit saya, menggembungkannya ditambahkan ke Viewgroup. Dengan cara ini saya tidak dapat mengubah gaya secara dinamis tetapi saya dapat membuat beberapa penyesuaian gaya. Komposit saya:
}
dan tampilan saya di xml tempat saya dapat menetapkan gaya:
sumber
Anda dapat membuat xml yang berisi tata letak dengan gaya yang diinginkan dan kemudian mengubah sumber latar belakang tampilan Anda, seperti ini .
sumber