Src dinamis untuk tag ‹bitmap› di Android xml

Pertanyaan: Apakah ada cara untuk menyetel atribut "src" secara dinamis pada "bitmap" XML dalam file XML Android?

Saya memiliki drawable XML khusus bernama "repeat_background.xml" yang didefinisikan sebagai berikut:

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/background"
    android:tileMode="repeat" />

Saya menggunakan drawable ini untuk "mengelompokkan" jpg 1x1 (bernama background.jpg) sebagai latar belakang untuk semua halaman di aplikasi saya, dan ini berfungsi dengan baik - berikut ini contoh menyetelnya sebagai latar belakang LinearLayout

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
         android:orientation="vertical"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:background="@drawable/repeat_background">

Namun, saya ingin jpg sebenarnya (dalam hal ini "background.jpg" dari @drawable/background) didasarkan pada preferensi pengguna - jadi saya akan memiliki daftar yang memungkinkan pengguna memilih merah, biru, oranye, dll. .sehingga pengguna dapat mengganti warna latar belakang yang ditampilkan di aplikasi, dan saya akan memiliki jpg 1x1 yang sesuai dengan setiap warna yang tersedia di paket sumber daya saya - namun bagaimana cara menampilkan jpg pilihan sebagai latar belakang?

Saya tidak ingin memanggil beberapa kode secara manual di setiap Fragmen atau Aktivitas, saya ingin sesuatu yang menghormati preferensi pengguna dan bereaksi sesuai dengan itu.

Saya sudah mencoba memperluas kelas BitmapDrawable, tetapi tidak berhasil. Setiap saran tentang bagaimana saya dapat mencapai hal ini sangat dihargai.


person DiscDev    schedule 09.07.2015    source sumber


Jawaban (1)


Anda dapat melakukannya dalam kode Java, menggunakan setBackgroundDrawable(new ColorDrawable(color)). Itu tidak bisa dilakukan di xml.

person Gabe Sechan    schedule 09.07.2015
comment
Bisakah Anda menemukan sumber untuk @Gabe Seechan ini? Saya menggunakan ini pada 100+ halaman xml dan saya mencoba menghindari keharusan memanggil metode di setiap Aktivitas atau Fragmen. - person DiscDev; 09.07.2015
comment
Sebagai permulaan, sistem parsing xml tidak mengetahui apa itu preferensi bersama. Tidak ada keterkaitan antara keduanya. - person Gabe Sechan; 09.07.2015
comment
Benar - Saya berharap ada beberapa trik yang bisa saya lakukan, menggunakan kelas Tampilan khusus yang memperluas BitmapDrawable dan memeriksa preferensi ajaib di sana, lalu menetapkan jpg tertentu sebagai src tergantung pada preferensi? - person DiscDev; 09.07.2015
comment
Jika Anda ingin mencapai level itu- oke. Anda dapat membuat kelas baru yang berasal dari tata letak linier, dan mengganti ketiga konstruktornya untuk mengganti latar belakang setelah memanggil super. Namun kapan pun Anda ingin menggunakan warna latar belakang itu, Anda harus menggunakan kelas itu alih-alih tata letak linier- dan mengubah SEMUA xml Anda untuk melakukannya. Dan kemudian lakukan hal yang sama untuk tata letak relatif jika perlu dan FrameLayout jika perlu. Dan mungkin ListView, jika perlu. Anda sedang melihat banyak pekerjaan. - person Gabe Sechan; 09.07.2015
comment
Aduh. Di iOS saya akhirnya membuat subkelas UIViewController dan pada dasarnya melakukan apa yang Anda sarankan lakukan dengan subkelas LinearLayout...sebagian masalahnya adalah saya ingin membuat tema lebih dari sekadar LinearLayouts - Tombol, dll. jadi saya berharap dapat membuat yang dapat digunakan kembali widget bitmap cerdas dengan XML untuk membuat solusi saya saat ini berfungsi dengan sedikit modifikasi...sayangnya hal ini tidak mungkin dilakukan dengan cara ini. - person DiscDev; 09.07.2015