Jika saya menentukan warna dalam sumber daya
<resources>
<color name="someColor">#123456</color>
</resources>
itu mungkin untuk mengatur warna dengan id-nya, seperti
view.setTextColor(R.color.someColor);
Apakah mungkin juga untuk mendapatkan nilai string warna dari colors.xml?
Sesuatu seperti
colorStr = getColor(R.color.someColor);
// -> colorStr = "#123456"
Jika ya, adakah yang bisa memberi contoh?
Terima kasih
//noinspection ResourceType
tepat di atas pernyataan Anda.getResources().getString(0+R.color.someColor);
bekerjaHanya demi copypasta yang mudah:
Atau jika Anda menginginkannya tanpa transparansi:
sumber
'#' + Integer.toHexString(getResources().getColor(R.color.someColor);
karena kemudian saya menggunakannya diColor.parseColor
Jawaban yang diberikan di atas tidak diperbarui.
Silakan coba yang ini
sumber
Semua solusi di sini menggunakan
Integer.toHexString()
jeda jika Anda memiliki nol di depan dalam string hex Anda. Warna-warna seperti itu#0affff
akan menghasilkan#affff
. Gunakan ini sebagai gantinya:atau dengan alfa:
sumber
Penyebab
getResources().getColor
perlu api> 23. Jadi ini lebih baik: Hanya demi kemudahan salin & tempel:Integer.toHexString( ContextCompat.getColor( getContext(), R.color.someColor ) );
Atau jika Anda menginginkannya tanpa transparansi: `
Integer.toHexString( ContextCompat.getColor( getContext(), R.color.someColor ) & 0x00ffffff );
sumber
ContextCompat.getColor
tidak mengambil 3 argumenUntuk API di atas 21 Anda bisa menggunakan
Ini akan mengembalikan warna dalam format string. Untuk mengubahnya menjadi warna dalam format integer (terkadang hanya integer yang diterima) maka:
Ekspresi di atas mengembalikan padanan integer dari warna yang ditentukan dalam file color.xml
sumber
Tambahkan @SuppressLint ("ResourceType") jika terjadi kesalahan. Seperti di bawah.
sumber
Saya rasa tidak ada fungsi standar untuk itu. Namun Anda dapat mengubah pengembalian nilai dari
getColor()
menjadi hex dan mengubah nilai hex menjadi string.hex 123456 = int 1193046;
sumber
Beginilah cara saya melakukannya:
sumber
Ini berhasil untuk saya!
sumber
Jika Anda tidak ingin menggunakan
ContextCompat
atauSuppressLint
, cukup tambahkanstring
sumber daya tepat di bawahcolor
.Dari pada
Menggunakan
Kode Anda memang menjadi lebih berulang tetapi jauh lebih bersih. Selain itu, lupa untuk memperbarui
string
perubahan setelahcolor
hampir tidak mungkin karena mereka berada tepat di samping satu sama lain.sumber