Saya memiliki ImageView dan saya perlu menerapkan gaya secara terprogram ke gambar ini alih-alih melakukannya di xml

<style name="mainicon">
    <item name="android:background">@drawable/icon_background</item>
    <item name="android:foregroundTint">@drawable/foreground_selector</item>
    ...
</style>


val buttonImageView = view.findViewById<ImageView>(R.id.main_button) as ImageView

Pertanyaan saya adalah bagaimana saya dapat menerapkan gaya secara terprogram ke tampilan gambar ini?

0
Green Ho 17 Juni 2020, 10:41

1 menjawab

Jawaban Terbaik

Anda tidak dapat mengubah gaya View yang dibuat dan dilampirkan. style dapat diatur hanya dalam konstruktor, jadi jika Anda menggunakan deklarasi XML maka style sudah diterapkan di sana (dengan atribut style, tanpa awalan android:)

Anda dapat menghapus View Anda saat ini dan menambahkan yang baru di tempat yang sama dengan gaya baru yang diterapkan oleh konstruktor

new ImageView(context, null, R.style.mainicon);

Atau menggunakan ContextThemeWrapper

new ImageView(new ContextThemeWrapper(context, R.style.mainicon));

Sebagai opsi, Anda juga dapat mendefinisikan dalam XML dua ImageView dengan gaya berbeda dan mengganti Visibility mereka. ini bukan solusi terbaik untuk kinerja, karena Anda akan menyimpan tambahan, tidak digunakan View dalam memori, tetapi dengan Visiblity.GONE itu tidak akan ditarik, jadi tidak akan memakan banyak memori dan mungkin lebih mudah untuk mengubah visibilitas daripada menghapus/menambahkan View baru

2
snachmsm 17 Juni 2020, 08:01