Di pustaka AppCompat yang baru, kita bisa mewarnai tombol dengan cara ini:
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/follow"
android:id="@+id/button_follow"
android:backgroundTint="@color/blue_100"
/>
Bagaimana cara menyetel warna tombol secara terprogram dalam kode saya? Saya pada dasarnya mencoba menerapkan pewarnaan bersyarat pada tombol berdasarkan beberapa masukan pengguna.
android
android-appcompat
Stephane
sumber
sumber
Jawaban:
Menurut dokumentasi , metode terkait
android:backgroundTint
adalah setBackgroundTintList (daftar ColorStateList)Memperbarui
Ikuti tautan ini untuk mengetahui cara membuat Sumber Daya Daftar Status Warna.
lalu muat menggunakan
di mana
contextInstance
merupakan instance dari aContext
menggunakan AppCompart
sumber
ViewCompat.setBackgroundTintList(View, ColorStateList)
yang bisa digunakan sepenuhnya kembali ke API 4. Tapi itu hanya bekerja untuk tampilan yang mengimplementasikanTintableBackgroundView
, misalnyaAppCompatButton
(bukan yang biasaButton
).ViewCompat.setBackgroundTintList(View, ColorStateList)
, seperti yang disarankan @Jon Adams, menjadi lebih masuk akal karena View.setSupportButtonTintList dibatasi denganRestrictTo
anotasi. Detail di sini: developer.android.com/reference/android/support/annotation/…Anda bisa menggunakan
Tapi saya akan merekomendasikan Anda untuk menggunakan pustaka dukungan yang dapat digambar tinting yang baru saja dirilis kemarin:
Anda dapat menemukan lebih banyak dalam entri blog ini (lihat bagian "Warna yang dapat digambar")
sumber
Sepertinya pandangan memiliki mekanisme sendiri untuk manajemen warna, jadi lebih baik akan menempatkan daftar warna:
sumber
Dalam memperluas jawaban dimsuz dengan benar dengan memberikan situasi kode nyata, lihat cuplikan kode berikut:
Solusi ini untuk skenario di mana drawable digunakan sebagai latar belakang tombol. Ini berfungsi pada perangkat pra-Lollipop juga.
sumber
Sudahkah Anda mencoba sesuatu seperti ini?
perhatikan bahwa getResources () hanya akan bekerja dalam sebuah aktivitas. Tapi bisa juga disebut dalam setiap konteks.
sumber
berikut cara melakukannya di kotlin:
sumber
Anda dapat menggunakan contoh DrawableCompat
sumber
ini mudah ditangani di Tombol Material baru dari pustaka desain material, pertama-tama, tambahkan ketergantungan:
lalu di XML Anda, gunakan ini untuk tombol Anda:
dan saat Anda ingin mengubah warnanya, berikut kodenya di Kotlin, Ini tidak usang dan dapat digunakan sebelum Android 21:
sumber
Cara saya berhasil membuat milik saya bekerja adalah dengan menggunakan
CompoundButtonCompat.setButtonTintList(button, colour)
.Menurut pemahaman saya, ini berfungsi terlepas dari versi android.
sumber
Saya memiliki masalah serupa. Saya ingin mewarnai latar belakang drawable yang kompleks untuk tampilan berdasarkan nilai color (int). Saya berhasil menggunakan kode:
Dimana warna adalah nilai int yang mewakili warna yang dibutuhkan. Ini mewakili ColorStateList xml sederhana:
Semoga ini membantu.
sumber
ColorStateList.valueOf(ColorInt)
Untuk ImageButton Anda dapat menggunakan:
sumber
Jika Anda menggunakan
Kotlin
danMaterial Design
, Anda dapat mengubah warnaMaterialButton
seperti ini:Anda dapat meningkatkannya lebih baik lagi dengan membuat fungsi ekstensi
MaterialButton
untuk membuat kode Anda lebih mudah dibaca dan pengkodean Anda sedikit lebih nyaman:Kemudian, Anda dapat menggunakan fungsi Anda di mana saja seperti ini:
sumber
Selain jawaban Shayne3000 , Anda juga dapat menggunakan sumber warna (tidak hanya warna int). Versi Kotlin :
sumber
Jawaban yang disarankan di sini tidak berfungsi dengan baik pada android 5.0 jika daftar status warna berbasis XML Anda merujuk pada atribut bertema .. Misalnya, saya memiliki daftar status warna xml seperti:
Menggunakan ini sebagai backgroundTint saya dari xml berfungsi dengan baik di Android 5.0 dan yang lainnya. Namun jika saya mencoba mengatur ini dalam kode seperti ini:
(Jangan lakukan ini)
Sebenarnya tidak masalah jika saya meneruskan Aktivitas atau konteks tombol ke metode ContextCompat.getColorStateList (), tidak ada yang memberi saya daftar status warna yang sesuai sehubungan dengan tema tempat tombol berada. Ini karena penggunaan atribut tema dalam daftar status warna tidak didukung hingga api 23 dan ContextCompat tidak melakukan sesuatu yang khusus untuk mengatasinya. Sebagai gantinya, Anda harus menggunakan AppCompatResources.getColorStateList () yang melakukan resolusi atribut parsing / tema sumber dayanya sendiri pada perangkat <API 23.
Sebaliknya, Anda harus menggunakan ini:
TLDR: gunakan AppCompatResources dan bukan -ContextCompat- jika Anda perlu menyelesaikan resource bertema di semua versi API android.
Untuk informasi lebih lanjut tentang topik tersebut, lihat artikel ini .
sumber