Sebelum AppCompat
pembaruan keluar hari ini saya bisa mengubah warna tombol di Android L tetapi tidak pada versi yang lebih lama. Setelah memasukkan pembaruan AppCompat baru saya tidak dapat mengubah warna untuk kedua versi, ketika saya mencoba tombol hanya menghilang. Adakah yang tahu cara mengubah warna tombol?
Gambar-gambar berikut menunjukkan apa yang ingin saya capai:
Tombol putih adalah default, yang merah adalah yang saya inginkan.
Inilah yang saya lakukan sebelumnya untuk mengubah warna tombol di styles.xml
:
<item name="android:colorButtonNormal">insert color here</item>
dan melakukannya secara dinamis:
button.getBackground().setColorFilter(getResources().getColor(insert color here), PorterDuff.Mode.MULTIPLY);
Saya juga mengubah tema induk dari @android:style/Theme.Material.Light.DarkActionBar
menjadiTheme.AppCompat.Light.DarkActionBar
Jawaban:
Secara resmi diperbaiki di Perpustakaan Dukungan rev.22 (Jumat 13 Maret 2015). Lihat masalah kode google yang relevan:
https://issuetracker.google.com/issues/37008632
Contoh penggunaan
theme.xml:
v21 / theme.xml
sumber
android:theme="@style/ColoredButton"
, dan di styles.xml<style name="ColoredButton" parent="Widget.AppCompat.Button"> <item name="colorButtonNormal">@color/button_yellow</item> </style>
Edit (22.06.2016):
Pustaka Appcompat mulai mendukung tombol materi setelah saya memposting respons asli. Dalam posting ini Anda dapat melihat implementasi termudah dari tombol datar dan datar.
Jawaban asli:
Karena AppCompat itu tidak mendukung tombol, Anda dapat menggunakan xml sebagai latar belakang. Untuk melakukan itu saya telah melihat kode sumber Android dan menemukan file terkait untuk tombol bahan styling.
1 - Lihatlah implementasi asli tombol material dari sumber.
Lihatlah btn_default_material.xml pada kode sumber android .
Anda dapat menyalin file ke folder drawable-v21 proyek Anda. Tapi jangan sentuh attr warna di sini. File yang perlu Anda ubah adalah file kedua.
drawable-v21 / custom_btn.xml
2 - Dapatkan bentuk tombol bahan asli
Ketika Anda menyadari ada bentuk yang digunakan di dalam drawable ini yang dapat Anda temukan di file kode sumber ini .
3 - Mendapatkan dimensi tombol material
Dan dalam file ini Anda ada beberapa dimensi yang digunakan dari file yang dapat Anda temukan di sini . Anda dapat menyalin seluruh file dan memasukkan nilai Anda folder . Ini penting untuk menerapkan ukuran yang sama (yang digunakan pada tombol material) untuk semua tombol
4 - Buat file lain yang dapat ditarik untuk versi lama
Untuk versi yang lebih lama Anda harus memiliki drawable lain dengan nama yang sama. Saya langsung meletakkan item dalam inline alih-alih referensi. Anda mungkin ingin referensi mereka. Tapi sekali lagi, yang paling penting adalah dimensi asli dari tombol material.
drawable / custom_btn.xml
Hasil
Tombol Anda akan memiliki efek riak pada perangkat Lollipop. Versi lama akan memiliki tombol yang persis sama kecuali efek riak. Tetapi karena Anda menyediakan drawable untuk status yang berbeda, mereka juga akan merespons acara sentuh (seperti cara lama).
sumber
Ini telah ditingkatkan di pustaka AppCompat v23.0.0 dengan penambahan lebih banyak tema termasuk
Pertama-tama sertakan ketergantungan appCompat jika Anda belum melakukannya
sekarang karena Anda perlu menggunakan v23 dari aplikasi compat, Anda harus menargetkan SDK-v23 juga!
Di Anda
values/theme
Di Anda
values/style
Di Anda
values-v21/style
Karena tema tombol Anda didasarkan pada
Widget.AppCompat.Button.Colored
Warna teks pada tombol secara default putih!tetapi tampaknya ada masalah ketika Anda menonaktifkan tombol, tombol akan berubah warna menjadi abu-abu terang, tetapi warna teks akan tetap putih!
solusi untuk ini adalah secara khusus mengatur warna teks pada tombol menjadi putih! seperti yang saya lakukan dalam gaya yang ditunjukkan di atas.
sekarang Anda dapat dengan mudah menentukan tombol Anda dan biarkan AppCompat melakukan sisanya :)
Status Penyandang Cacat
Status Diaktifkan
Edit:
Menambahkan
<Button android:theme="@style/BrandButtonStyle"/>
sumber
<Button android:theme="@style/BrandButtonStyle"/>
. Ini harus menjaditheme
atribut dan tidak yangstyle
atribut.Di Android Support Library 22.1.0, Google membuat
Button
warna menjadi sadar. Jadi, cara lain untuk menyesuaikan warna latar belakang tombol adalah dengan menggunakanbackgroundTint
atribut.Sebagai contoh,
sumber
Untuk mendukung tombol berwarna, gunakan pustaka AppCompat terbaru (> 23.2.1 ) dengan:
Widget AppCompat:
Gaya AppCompat:
NB! Untuk mengatur warna khusus dalam xml: gunakan attr:
app
sebagai gantiandroid
(gunakan
alt+enter
atau nyatakanxmlns:app="http://schemas.android.com/apk/res-auto"
untuk digunakanapp
)app : backgroundTint = "@ color / your_custom_color"
Contoh:
sumber
Dengan Pustaka Dukungan terbaru, Anda hanya dapat mewarisi aktivitas Anda
AppCompatActivity
, sehingga itu akan mengembangButton
sebagai AndaAppCompatButton
dan memberi Anda kesempatan untuk menata warna setiap tombol pada tata letak dengan penggunaanandroid:theme="@style/SomeButtonStyle"
, di manaSomeButtonStyle
adalah:Bekerja untuk saya di 2.3.7, 4.4.1, 5.0.2
sumber
android:theme
dan tidakstyle
. Anda juga dapat menambahkancolorControlHighlight
dancolorControlActivated
.Theme.AppCompat.Light
sebagai gantinya.jika Anda ingin gaya di bawah ini
tambahkan gaya ini tombol Anda
jika Anda menginginkan gaya ini
tambahkan kode di bawah ini
sumber
compile 'com.android.support:appcompat-v7:23.1.0'
Anda harus menambahkan.Jawabannya adalah TEMA bukan gaya
Masalahnya adalah bahwa warna Tombol menempel pada colorButtonNormal tema. Saya telah mencoba mengubah Style dengan berbagai cara tanpa hasil. Jadi saya mengubah tema tombol .
Buat tema dengan colorButtonNormal dan colorPrimary:
Gunakan tombol tema ini
"AppTheme.Button" dapat berupa apa saja yang memperluas gaya Tombol seperti di sini saya menggunakan warna primer untuk warna teks:
Dan Anda mendapatkan tombol dalam warna apa pun yang Anda inginkan yang kompatibel dengan desain material.
sumber
Saya baru saja membuat perpustakaan android, yang memungkinkan Anda dengan mudah memodifikasi warna tombol dan warna riak
https://github.com/xgc1986/RippleButton
Anda tidak perlu membuat gaya untuk setiap tombol yang Anda inginkan dengan warna yang berbeda, memungkinkan Anda untuk menyesuaikan warna secara acak
sumber
ini bekerja untuk saya dengan appcompat-v7: 22.2.0 di android + 4.0
di styles.xml Anda
dalam file tata letak Anda
sumber
Tata letak:
styles.xml:
color / button_background_selector.xml:
color / button_text_selector.xml:
sumber
Bagi mereka yang menggunakan di
ImageButton
sini adalah bagaimana Anda melakukannya:Di style.xml:
di v21 / style.xml:
Kemudian di file tata letak Anda:
sumber
Jika Anda menggunakan solusi gaya dengan colorButtonNormal , jangan lupa untuk mewarisi dari Widget.AppCompat.Button.Colored sehingga efek riak bekerja;)
Suka
sumber
Solusi sederhana lain menggunakan AppCompatButton
sumber
Menggunakan:
Atau bahkan :
dan itu akan memberi warna khusus pada tombol.
sumber
Jika Anda hanya ingin tombol material "Rata", Anda dapat menyesuaikan latar belakangnya menggunakan atribut selectableItemBackground seperti dijelaskan di sini .
sumber
Untuk mengubah warna satu tombol
sumber
Bagi saya, masalahnya adalah bahwa di Android 5.0
android:colorButtonNormal
tidak ada efek, dan sebenarnya, tidak ada item dari tema (sepertiandroid:colorAccent
), tetapi di Android 4.4.3, misalnya, lakukan. Proyek ini dikonfigurasi dengancompileSdkVersion
dantargetSdkVersion
ke 22, jadi saya telah membuat semua perubahan ketika @Muhammad Alfaifi menyarankan, tetapi pada akhirnya, saya perhatikan bahwa masalahnya adalah buildToolsVersion , yang tidak diperbarui. Begitu saya berubah ke 23.0.1 , semuanya mulai bekerja hampir seperti biasa. Sekarang,android:colorButtonNormal
masih tidak memiliki efek, tetapi setidaknya tombol bereaksiandroid:colorAccent
, yang bagi saya dapat diterima.Saya harap petunjuk ini dapat membantu seseorang. Catatan: Saya telah menerapkan gaya langsung ke tombol, karena tombolnya
android:theme=[...]
juga tidak memiliki efek.sumber
Salah satu cara untuk melakukan ini memungkinkan Anda untuk hanya menunjuk ke gaya dan BUKAN tema SEMUA tombol di aplikasi Anda sama.
Di themes.xml tambahkan tema
Sekarang di styles.xml tambahkan
Sekarang di tata letak Anda cukup arahkan ke GAYA di Tombol Anda
sumber
MEMPERBARUI
Gunakan pustaka dukungan desain (23.2.0) dan appcompatwidgets seperti di bawah ini
Di Perpustakaan Dukungan Android 22.1 :
Daftar lengkap widget sadar warna:
Desain Material untuk Perangkat Pra-Lollipop :
sumber
Jika Anda ingin menggunakan gaya AppCompat seperti Widget.AppCompat.Button , Base.Widget.AppCompat.Button.Colored , dll., Anda perlu menggunakan gaya ini dengan tampilan yang kompatibel dari perpustakaan dukungan.
Kode di bawah ini tidak berfungsi untuk perangkat pra-lolipop:
Anda perlu menggunakan AppCompatButton untuk mengaktifkan gaya AppCompat:
sumber
ImageView
akan diganti denganAppCompatImageView
dan itu harus sama dengan semua widget, yang memilikiAppCompat
versi yang sesuai .android.support.v7.widget.AppCompatImageView
secara eksplisit.last target version
, @power?Saya menggunakan ini. Efek riak dan bayangan klik tombol berfungsi.
style.xml
Tombol pada tata letak:
sumber
Saya sebenarnya tidak ingin perubahan pada gaya tombol kustom saya tetapi sayangnya mereka tidak berfungsi lagi.
Aplikasi saya memiliki minSdkVersion dari 9 dan semuanya berfungsi sebelumnya.
Saya tidak tahu mengapa, tetapi karena saya menghapus android: sebelum buttonStyle sepertinya berfungsi lagi
sekarang = berfungsi:
<item name="buttonStyle">@style/ButtonmyTime</item>
before = hanya tombol material abu-abu:
<item name="android:buttonStyle">@style/ButtonmyTime</item>
Saya tidak memiliki folder spezial untuk versi android yang lebih baru karena tombol saya cukup datar dan harus terlihat sama di semua versi android.
Mungkin seseorang dapat memberi tahu saya mengapa saya harus menghapus "android:" ImageButton masih bekerja dengan "android:"
sumber
Setelah 2 hari mencari jawaban, tema tombol tidak berfungsi untuk saya di API <21.
Satu-satunya solusi saya adalah mengesampingkan pewarnaan AppCompatButton tidak hanya dengan tema aplikasi dasar "colorButtonNormal" tetapi juga tampilan backgroundTint seperti ini:
Anda kemudian dapat mendefinisikan warna Tombol Anda seperti ini:
sumber
Jawaban SO ini membantu saya sampai pada jawaban https://stackoverflow.com/a/30277424/3075340
Saya menggunakan metode utilitas ini untuk mengatur warna latar tombol. Ini bekerja dengan perangkat pra-lolipop:
Cara menggunakan dalam kode:
Dengan cara ini, Anda tidak perlu menentukan ColorStateList jika Anda hanya ingin mengubah warna latar belakang dan tidak lebih dari mempertahankan efek tombol cantik dan apa yang tidak.
sumber
Saya mengatur
android:textColor
ke@null
dalam tombol tema saya dan itu membantu.styles.xml
some_layout.xml
Sekarang warna teks tombol
colorAccent
didefinisikan dalamAppTheme
sumber
jika Anda menggunakan kotlin, dapatkah Anda melihat Semua atribut dari MaterialButton didukung. Jangan gunakan atribut android: background. MaterialButton mengelola latar belakangnya sendiri yang dapat digambar, dan mengatur latar belakang baru berarti warna Material tombol dinonaktifkan tidak dapat lagi menjamin bahwa atribut baru yang diperkenalkannya akan berfungsi dengan baik. Jika latar belakang standar diubah, Material Button tidak dapat menjamin perilaku yang didefinisikan dengan baik. Di MainActivity.kt
Di activity_main.xml
sumber: contoh bahan tombol ganti warna
sumber
jika Anda ingin melakukan ini melalui kode dalam warna apa pun, gunakan ini:
sumber