Saya ingin sedikit mengubah warna tombol Android standar agar lebih cocok dengan pencitraan merek klien.
Cara terbaik yang saya temukan untuk melakukan ini sejauh ini adalah mengubah Button
drawable drawable menjadi drawable yang terletak di res/drawable/red_button.xml
:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/red_button_pressed" />
<item android:state_focused="true" android:drawable="@drawable/red_button_focus" />
<item android:drawable="@drawable/red_button_rest" />
</selector>
Tetapi melakukan hal itu mengharuskan saya untuk membuat tiga drawable berbeda untuk setiap tombol yang ingin saya sesuaikan (satu untuk tombol saat istirahat, satu saat fokus, dan satu lagi saat ditekan). Tampaknya lebih rumit dan tidak kering daripada yang saya butuhkan.
Yang saya benar-benar ingin lakukan adalah menerapkan semacam transformasi warna pada tombol. Apakah ada cara yang lebih mudah untuk mengubah warna tombol daripada yang saya lakukan?
android
android-layout
emmby
sumber
sumber
Jawaban:
Saya menemukan bahwa ini semua dapat dilakukan dalam satu file dengan cukup mudah. Masukkan sesuatu seperti kode berikut dalam file bernama
custom_button.xml
dan kemudian aturbackground="@drawable/custom_button"
di tampilan tombol Anda:sumber
"Error: No resource found that matches the given name (at 'color' with value '@color/yellow1')"
Apakah referensi ini untuk warna bawaan? sepertinya saya perlu res / values / color.xml untuk membuat ini bekerjaSebagai lanjutan dari jawaban Tomasz, Anda juga dapat secara program mengatur warna seluruh tombol menggunakan mode pengganda PorterDuff. Ini akan mengubah warna tombol daripada hanya warna.
Jika Anda mulai dengan tombol berarsir abu-abu standar:
akan memberi Anda tombol berbayang merah,
akan memberi Anda tombol hijau berbayang dll., di mana nilai pertama adalah warna dalam format hex.
Ini bekerja dengan mengalikan nilai warna tombol saat ini dengan nilai warna Anda. Saya yakin ada banyak lagi yang dapat Anda lakukan dengan mode ini.
sumber
import android.graphics.PorterDuff;
Mike, Anda mungkin tertarik dengan filter warna.
Sebuah contoh:
coba ini untuk mencapai warna yang Anda inginkan.
sumber
Ini adalah solusi saya yang berfungsi sempurna mulai dari API 15 . Solusi ini menjaga semua efek klik tombol standar, seperti materi
RippleEffect
. Saya belum mengujinya pada API yang lebih rendah, tetapi harus berfungsi.Yang perlu Anda lakukan adalah:
1) Buat gaya yang hanya berubah
colorAccent
:2) Tambahkan dua baris ini ke
button
widget Anda :Widget Tombol Sampel
sumber
colorAccent
memengaruhi lebih dari sekadar latar belakang tombol.Anda sekarang dapat juga menggunakan appcompat-v7 ini AppCompatButton dengan
backgroundTint
atribut:sumber
app:backgroundTint
bukanandroid:backgroundTint
saat menggunakan AppCompat.Saya suka saran filter warna dalam jawaban sebelumnya dari @conjugatedirection dan @Tomasz; Namun, saya menemukan bahwa kode yang diberikan sejauh ini tidak semudah yang saya harapkan.
Pertama, tidak disebutkan di mana menerapkan dan menghapus filter warna. Mungkin ada tempat-tempat bagus lain untuk melakukan ini, tetapi yang terlintas di benak saya adalah OnTouchListener .
Dari bacaan saya tentang pertanyaan awal, solusi ideal adalah solusi yang tidak melibatkan gambar apa pun. Jawaban yang diterima menggunakan custom_button.xml dari @emmby mungkin lebih cocok daripada filter warna jika itu adalah tujuan Anda. Dalam kasus saya, saya mulai dengan gambar png dari desainer UI tentang seperti apa bentuk tombol itu. Jika saya mengatur latar belakang tombol untuk gambar ini, umpan balik sorotan default hilang sepenuhnya. Kode ini menggantikan perilaku itu dengan efek penggelapan program.
Saya mengekstraksi ini sebagai kelas terpisah untuk aplikasi ke beberapa tombol - ditampilkan sebagai kelas dalam anonim hanya untuk mendapatkan ide.
sumber
Jika Anda membuat tombol warna dengan XML, Anda dapat membuat kode sedikit lebih bersih dengan menetapkan status fokus dan ditekan dalam file terpisah dan menggunakannya kembali. Tombol hijau saya terlihat seperti ini:
sumber
Solusi terpendek yang bekerja dengan semua versi Android:
Catatan / Persyaratan :
app:
namespace dan tidak yangandroid:
namespace!versi appcompat> 24.2.0
dependencies {compile 'com.android.support:appcompat-v7:25.3.1'}
Penjelasan :
sumber
app:backgroundTint="@color/my_color"
tidak berhasil.android:backgroundTint="@color/my_color"
bekerja dengan baik.Saya menggunakan pendekatan ini
style.xml
Seperti yang dapat Anda lihat dari atas, saya menggunakan gaya khusus untuk tombol saya. Warna tombol sesuai dengan warna aksen. Saya menemukan ini pendekatan yang jauh lebih baik daripada pengaturan
android:background
karena saya tidak akan kehilangan efek riak yang disediakan Google.sumber
Ada cara yang lebih mudah sekarang: android-holo-colors.com
Ini akan memungkinkan Anda mengubah warna semua drawable holo (tombol, pemintal, ...) dengan mudah. Anda memilih warna dan kemudian mengunduh file zip yang berisi drawables untuk semua resolusi.
sumber
Gunakan dengan cara ini:
sumber
Sedang
<Button>
digunakanandroid:background="#33b5e5"
. atau lebih baikandroid:background="@color/navig_button"
sumber
The DroidUX komponen perpustakaan memiliki
ColorButton
widget yang warnanya dapat diubah dengan mudah, baik melalui definisi xml dan pemrograman pada waktu berjalan, sehingga Anda bahkan dapat membiarkan pengguna untuk mengatur warna / tema tombol jika aplikasi Anda memungkinkan.sumber
Anda juga dapat menggunakan alat online ini untuk menyesuaikan tombol Anda http://angrytools.com/android/button/ dan gunakan
android:background="@drawable/custom_btn"
untuk menentukan tombol yang disesuaikan pada tata letak Anda.sumber
Anda dapat mengatur tema tombol Anda untuk ini
sumber
Cara mudah adalah dengan hanya mendefinisikan kelas Tombol kustom yang menerima semua properti yang Anda inginkan seperti jari-jari, gradien, warna yang ditekan, dll warna normal dan kemudian hanya menggunakannya dalam tata letak XML Anda alih-alih mengatur latar belakang menggunakan XML. Sampel ada di sini
Ini sangat berguna jika Anda memiliki banyak tombol dengan properti yang sama seperti jari-jari, warna yang dipilih, dll. Anda dapat menyesuaikan tombol yang diwarisi untuk menangani properti tambahan ini.
Hasil (Tidak ada pemilih Latar Belakang digunakan).
Tombol Normal
Tombol ditekan
sumber
Cara saya melakukan tombol gaya berbeda yang bekerja cukup baik adalah dengan subklas objek Tombol dan menerapkan filter warna. Ini juga menangani keadaan yang diaktifkan dan dinonaktifkan dengan menerapkan alfa ke tombol.
sumber
values \ styles.xml
kemudian:
sumber
Per pedoman desain bahan, Anda perlu menggunakan gaya seperti kode di bawah ini
dan dalam tata letak tambahkan properti ini ke tombol Anda
sumber
Sederhana .. tambahkan ketergantungan ini dalam proyek Anda dan buat tombol dengan 1. Bentuk apa saja 2. Warna apa saja 3. Batas apa saja 4. Dengan efek material
https://github.com/manojbhadane/QButton
sumber