Saya memiliki tombol yang ditentukan seperti yang ditunjukkan di bawah ini. Ketika saya ingin menonaktifkannya, saya menggunakan my_btn.setEnabled(false)
, tetapi saya juga ingin membuatnya menjadi abu-abu. Bagaimana saya bisa melakukan itu?
Terima kasih
<Button android:id="@+id/buy_btn" style="@style/srp_button" />
style / srp_button
<style name="srp_button" parent="@android:style/Widget.Button">
<item name="android:background">@drawable/btn_default</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textColor">#ffffff</item>
<item name="android:textSize">14sp</item>
<item name="android:typeface">serif</item>
<item name="android:paddingLeft">30dp</item>
<item name="android:paddingRight">30dp</item>
<item name="android:paddingTop">5dp</item>
<item name="android:paddingBottom">5dp</item>
</style>
drawable / btn_default.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/pink" />
<corners android:radius="6dp" />
</shape>
Jawaban:
Anda harus memberikan 3 atau 4 status di Anda
btn_defaut.xml
sebagai pemilih.Anda akan memberikan efek dan latar belakang untuk negara bagian yang sesuai.
Berikut pembahasan detailnya: Tombol Android Standar dengan warna berbeda
sumber
android:state_disable="true"
itu akan menunjukkan status ketika Tombol dinonaktifkan, cara yang mudah dan direkomendasikan.android:state_disable="true"
, bukan? Apakah yang Anda maksudandroid:state_enabled="false"
?Anda juga dapat membuatnya tampak tidak aktif dengan menyetel alfa (menjadikannya semi-transparan). Ini sangat berguna jika latar belakang tombol Anda adalah gambar, dan Anda tidak ingin membuat status untuknya.
memperbarui: Saya menulis solusi di atas sebelum Kotlin dan ketika saya masih pemula. Ini lebih merupakan solusi yang "cepat", tetapi saya tidak merekomendasikannya dalam lingkungan profesional.
Hari ini, jika saya menginginkan solusi umum yang berfungsi pada tombol / tampilan apa pun tanpa harus membuat daftar status, saya akan membuat ekstensi Kotlin.
Di Java, Anda dapat melakukan sesuatu yang mirip dengan fungsi util statis dan Anda hanya perlu meneruskan tampilan sebagai variabel. Ini tidak sebersih tapi berhasil.
sumber
View
. Dari pos G + ini : "Jika Tampilan Anda tidak berisi perintah menggambar yang tumpang tindih,setAlpha()
dioptimalkan dan kami cukup memodifikasi objek Paint untuk menerapkan alfa yang tepat. Ini terjadi ketikaView.hasOverlappingRendering()
mengembalikan nilai true.ImageView
S danTextView
s tanpa drawable latar belakang adalah kandidat umum untuk ini optimasi. Jika Anda berada dalam situasi ini, gunakansetAlpha()
sebanyak yang Anda inginkan. ".Solusi paling mudah adalah menyetel filter warna ke gambar latar belakang tombol seperti yang saya lihat di sini
Anda dapat melakukan sebagai berikut:
Semoga saya membantu seseorang ...
sumber
Mode.SRC_IN
harus digunakan sebagai pengganti Multiply. Lihat stackoverflow.com/a/17112876/550471Semua jawaban yang diberikan berfungsi dengan baik, tetapi saya ingat belajar bahwa menggunakan setAlpha bisa menjadi kinerja ide yang buruk (info lebih lanjut di sini ). Jadi, membuat StateListDrawable adalah ide yang lebih baik untuk mengelola status tombol yang dinonaktifkan. Begini caranya:
Buat XML btn_blue.xml di folder res / drawable:
Buat gaya tombol di res / values / styles.xml
Kemudian terapkan gaya ini ke tombol Anda:
Sekarang ketika Anda memanggil
btnBlue.setEnabled(true)
ATAUbtnBlue.setEnabled(false)
warna negara akan secara otomatis beralih.sumber
Setel Clickable sebagai false dan ubah warna backgroung sebagai:
sumber
Anda harus membuat file XML untuk tombol yang dinonaktifkan ( drawable / btn_disable.xml )
Dan buat selektor untuk tombol ( drawable / btn_selector.xml )
Tambahkan selektor ke tombol Anda
sumber
sumber
Saya menggunakan kode ini untuk itu:
sumber
Saya mencoba solusi di atas tetapi tidak satupun yang berhasil untuk saya. Saya pergi dengan opsi berikut:
sumber