Saya menggunakan perpustakaan dukungan Android v21.
Saya telah membuat tombol dengan warna latar belakang khusus. Efek desain Material seperti riak, mengungkapkan hilang (kecuali ketinggian saat klik) ketika saya menggunakan warna tanah belakang.
<Button
style="?android:attr/buttonStyleSmall"
android:background="?attr/colorPrimary"
android:textColor="@color/white"
android:textAllCaps="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Button1"
/>
Berikut ini adalah tombol normal dan efeknya berfungsi dengan baik.
<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textAllCaps="true"
android:text="Button1"
/>
android
android-5.0-lollipop
Sathesh
sumber
sumber
Jawaban:
Saat Anda menggunakan
android:background
, Anda mengganti banyak gaya dan tampilan dan nuansa tombol dengan warna kosong.Update: Sampai dengan rilis versi 23.0.0 dari appcompat , ada yang baru
Widget.AppCompat.Button.Colored
gaya yang menggunakan tema AndacolorButtonNormal
untuk warna cacat dancolorAccent
untuk warna diaktifkan.Ini memungkinkan Anda menerapkannya ke tombol Anda langsung melalui
Jika Anda memerlukan kustom
colorButtonNormal
ataucolorAccent
, Anda dapat menggunakanThemeOverlay
seperti yang dijelaskan dalam pro-tip ini danandroid:theme
pada tombol.Jawaban Sebelumnya
Anda dapat menggunakan drawable di direktori v21 Anda untuk latar belakang Anda seperti:
Ini akan memastikan warna latar belakang Anda
?attr/colorPrimary
dan memiliki animasi riak default menggunakan default?attr/colorControlHighlight
(yang Anda juga dapat mengatur dalam tema Anda jika Anda mau).Catatan: Anda harus membuat pemilih khusus kurang dari v21:
Dengan asumsi Anda memiliki beberapa warna yang Anda inginkan untuk keadaan default, ditekan, dan fokus. Secara pribadi, saya mengambil screenshot dari riak di tengah dipilih dan menarik negara / fokus utama dari itu.
sumber
Ada solusi sederhana lain untuk memberikan latar belakang kustom untuk tombol "Flat" sambil tetap mempertahankan efek "Material".
yaitu:
Dapat digunakan untuk tombol Flat , itu berfungsi pada API> = 11, dan Anda akan mendapatkan efek riak pada> = 21 perangkat, menjaga tombol biasa pada pra-21 hingga AppCompat diperbarui untuk mendukung riak di sana juga.
Anda juga dapat menggunakan selectableItemBackgroundBorderless untuk> = 21 tombol saja.
sumber
CardView
pendekatan, terima kasih telah berbagi!Berikut ini adalah cara yang kompatibel sederhana dan terbelakang untuk memberikan efek riak ke tombol terangkat dengan latar belakang khusus.
Tata letak Anda akan terlihat seperti ini
sumber
foreground
tidak ada efek sebelum 23. google.com/...Saya mengalami masalah ini hari ini sebenarnya bermain dengan perpustakaan v22.
Dengan asumsi bahwa Anda menggunakan gaya Anda dapat mengatur
colorButtonNormal
properti dan tombol akan menggunakan warna itu secara default.Di luar itu Anda masih bisa membuat gaya untuk tombol kemudian gunakan itu per tombol jika Anda membutuhkan berbagai macam warna (belum diuji, hanya berspekulasi).
Ingatlah untuk menambahkan
android:
sebelum nama item dalam gaya v21 Anda .sumber
Dengan AppCompat (22.1.1+) Anda dapat menambahkan gaya seperti ini:
Dan gunakan dengan hanya menerapkan gaya:
Secara terprogram mengubah warna, saya menemukan bahwa satu-satunya cara untuk memperbarui warna (pada API 15 atau 16) adalah dengan menggunakan 'daftar warna latar belakang'. Dan itu tidak menghapus animasi radial yang bagus di perangkat API 21:
Karena
button.setBackground(...)
danbutton.getBackground().mutate().setColorFilter(...)
tidak mengubah warna tombol pada API 15 dan 16 seperti yang mereka lakukan pada API 21.sumber
ColorStateList.valueOf( ... )
untuk membangun sederhanaColorStateList
hanya satu warna.ViewCompat.setBackgroundTintList(myButton, ColorStateList.valueOf(myColor);
Javadoc untuksetSupportBackgroundTintList
mengatakan itu harus dipanggil dengan cara ini.Jawaban @ ianhanniballake benar-benar benar dan sederhana. Tapi saya butuh beberapa hari untuk mengerti. Untuk seseorang yang tidak mengerti jawabannya, berikut ini adalah implementasi yang lebih detail
=== Atau ===
sumber
colorButtonNormal
di tema dasar@style/AppTheme
. Ini memberikan warna default untuk AppCompat untuk mewarnai tombol yang sesuai. Dan kemudian dapat menggunakan jawaban Anda untuk tema tampilan secara individual.android:theme="Theme.MaterialButton"
atauandroid:theme="@style/Theme.MaterialButton"
android:theme="@style/Theme.MaterialButton"
. Terima kasih atas kebenarannya.Saya menggunakan backgroundTint dan foreground:
sumber
Saya datang ke pos ini mencari cara untuk memiliki warna latar belakang
ListView
Item saya , namun tetap mempertahankan riaknya.Saya cukup menambahkan warna saya sebagai latar belakang dan selectableItemBackground sebagai latar depan:
dan itu bekerja seperti pesona. Saya kira teknik yang sama bisa digunakan untuk tombol juga. Semoga berhasil :)
sumber
Gunakan
backgroundTint
sebagai gantibackground
sumber
Jika Anda tertarik dengan ImageButton, Anda dapat mencoba hal sederhana ini:
sumber
v22.1
dariappcompat-v7
memperkenalkan beberapa kemungkinan baru. Sekarang mungkin untuk menetapkan tema tertentu hanya untuk satu tampilan.Jadi alih-alih mengatur warna yang diinginkan dalam tema global, kami membuat yang baru dan menetapkannya hanya untuk
Button
Contoh:
Dan gunakan gaya ini sebagai tema Anda
Button
sumber
Jika Anda setuju menggunakan perpustakaan pihak ketiga, lihat traex / RippleEffect . Ini memungkinkan Anda untuk menambahkan efek Ripple ke tampilan APAPUN hanya dengan beberapa baris kode. Anda hanya perlu membungkus, dalam file tata letak xml Anda, elemen yang Anda inginkan memiliki efek riak dengan sebuah
com.andexert.library.RippleView
wadah.Sebagai bonus tambahan, ini membutuhkan Min SDK 9 sehingga Anda dapat memiliki konsistensi desain di seluruh versi OS.
Berikut ini contoh yang diambil dari repo GitHub perpustakaan:
Anda dapat mengubah warna riak dengan menambahkan atribut ini elemen RippleView:
app:rv_color="@color/my_fancy_ripple_color
sumber
Menggunakan
dan warnanya akan diterima pada pra-lolipop
sumber
Ada dua pendekatan yang dijelaskan dalam tutorial yang bagus menjadi Alex Lockwood: http://www.androiddesignpatterns.com/2016/08/coloring-buttons-with-themeoverlays-background-tints.html :
Pendekatan # 1: Memodifikasi warna latar belakang tombol dengan ThemeOverlay
Pendekatan # 2: Mengatur warna latar belakang AppCompatButton
sumber
Secara terprogram menerapkan warna:
sumber
Saya mencoba ini:
alih-alih mengubah properti latar belakang. Ini tidak menghilangkan efek material.
sumber