Pertama-tama, pertanyaan ini menanyakan pertanyaan yang sangat mirip. Namun, pertanyaan saya memiliki perbedaan tipis.
Yang ingin saya ketahui adalah apakah mungkin secara terprogram mengubah colorPrimary
atribut suatu tema menjadi warna yang sewenang - wenang ?
Jadi misalnya, kita memiliki:
<style name="AppTheme" parent="android:Theme.Material.Light">
<item name="android:colorPrimary">#ff0000</item>
<item name="android:colorAccent">#ff0000</item>
</style>
Saat runtime, pengguna memutuskan ingin menggunakan #ccffff
sebagai warna utama. Tentu saya tidak bisa membuat tema untuk semua warna yang memungkinkan.
Saya tidak keberatan jika saya harus melakukan hal-hal yang peretasan, seperti mengandalkan internal pribadi Android, selama itu bekerja menggunakan SDK publik.
Tujuan saya adalah untuk akhirnya memiliki ActionBar
dan semua widget ingin CheckBox
menggunakan warna primer ini.
android
android-5.0-lollipop
nhaarman
sumber
sumber
Jawaban:
Tema tidak berubah, Anda tidak bisa.
sumber
Saya membaca komentar tentang aplikasi kontak dan bagaimana menggunakan tema untuk setiap kontak.
Mungkin, aplikasi kontak memiliki beberapa tema yang telah ditentukan sebelumnya (untuk setiap warna primer materi dari sini: http://www.google.com/design/spec/style/color.html ).
Anda dapat menerapkan tema sebelum metode setContentView di dalam metode onCreate.
Kemudian aplikasi kontak dapat menerapkan tema secara acak untuk setiap pengguna.
Metode ini adalah:
Tetapi metode ini memiliki masalah, misalnya dapat mengubah warna bilah alat, warna efek gulir, warna riak, dll, tetapi tidak dapat mengubah warna bilah status dan warna bilah navigasi (jika Anda ingin mengubahnya juga).
Kemudian untuk mengatasi masalah ini, Anda dapat menggunakan metode ini sebelumnya dan:
Dua metode ini mengubah warna bilah navigasi dan status. Ingat, jika Anda mengatur bilah navigasi Anda tembus, Anda tidak dapat mengubah warnanya.
Ini harus menjadi kode terakhir:
Anda dapat menggunakan sakelar dan menghasilkan nomor acak untuk menggunakan tema acak, atau, seperti di aplikasi kontak, setiap kontak mungkin memiliki nomor yang telah ditentukan terkait.
Contoh tema:
Maaf untuk bahasa inggris saya.
sumber
Anda dapat menggunakan Theme.applyStyle untuk mengubah tema saat runtime dengan menerapkan gaya lain ke dalamnya.
Katakanlah Anda memiliki definisi gaya ini:
Sekarang Anda dapat menambal tema Anda saat runtime seperti:
Metode
applyStyle
ini harus dipanggil sebelum tata letak meningkat! Jadi, kecuali jika Anda memuat tampilan secara manual, Anda harus menerapkan gaya ke tema sebelum memanggilsetContentView
aktivitas Anda.Tentu saja ini tidak dapat digunakan untuk menentukan warna yang berubah-ubah, yaitu satu dari 16 juta (256 3 ) warna. Tetapi jika Anda menulis sebuah program kecil yang menghasilkan definisi gaya dan kode Java untuk Anda, maka sesuatu seperti satu dari 512 (8 3 ) harus dimungkinkan.
Apa yang membuat ini menarik adalah bahwa Anda dapat menggunakan overlay gaya yang berbeda untuk berbagai aspek tema Anda.
colorAccent
Misalnya , tambahkan beberapa definisi overlay . Sekarang Anda dapat menggabungkan nilai yang berbeda untuk warna primer dan warna aksen dengan hampir sewenang-wenang.Anda harus memastikan bahwa definisi tema overlay Anda tidak sengaja mewarisi sekelompok definisi gaya dari definisi gaya induk. Misalnya gaya yang disebut
AppTheme.OverlayRed
secara implisit mewarisi semua gaya yang didefinisikanAppTheme
dan semua definisi ini juga akan diterapkan ketika Anda menambal tema master. Jadi hindari titik-titik dalam nama tema overlay atau gunakan sesuatu sepertiOverlay.Red
dan definisikanOverlay
sebagai gaya kosong.sumber
applyStyle
sebelum memanggilsetContentView
aktivitas Anda dan itu pasti berhasil.Saya telah menciptakan beberapa solusi untuk membuat tema warna apa saja, mungkin ini dapat bermanfaat bagi seseorang. API 9+
1. pertama buat " res / values-v9 / " dan letakkan di sana file ini: styles.xml dan folder "res / values" biasa akan digunakan dengan gaya Anda.
2. masukkan kode ini di res / values / styles.xml Anda:
3. masuk ke AndroidManifest:
4. buat kelas baru dengan nama "ThemeColors.java"
5. MainActivity:
Untuk mengubah warna, ganti saja Random dengan RGB Anda, Semoga ini bisa membantu.
Ada contoh lengkap: ColorTest.zip
sumber
context.setTheme(context.getResources().getIdentifier("T_" + stringColor, "style", context.getPackageName()));
bisakah Anda memberi saya penjelasan atau tautan untuk menindaklanjuti topik ini?Saya menggunakan kode Dahnark tetapi saya juga perlu mengubah latar belakang ToolBar:
sumber
Anda tidak dapat mengubah warna colorPrimary, tetapi Anda dapat mengubah tema aplikasi Anda dengan menambahkan gaya baru dengan warna colorPrimary yang berbeda
dan di dalam tema set aktivitas
sumber
dari suatu kegiatan yang dapat Anda lakukan:
sumber
GUNAKAN TOOLBAR
Anda dapat mengatur warna item toolbar kustom secara dinamis dengan membuat kelas toolbar kustom:
kemudian lihat di file tata letak Anda. Sekarang Anda dapat mengatur warna khusus menggunakan
Sumber:
Saya menemukan informasi untuk melakukan ini di sini: Cara mengubah warna ikon Toolbar Android secara dinamis
dan kemudian saya mengeditnya, memperbaikinya, dan mempostingnya di sini: GitHub: AndroidDynamicToolbarItemColor
sumber
Inilah yang BISA Anda lakukan:
tulis file dalam folder yang dapat digambar, beri nama background.xml
kemudian atur Layout Anda (atau apa pun masalahnya)
android:background="@drawable/background"
pada pengaturan tema Anda warna ini akan mewakili yang sama.
sumber