Efek riak pada perangkat pra dan Lollipop +
harrane dan Liuting benar. Jawaban yang diterima bukanlah cara terbaik. Izinkan saya menunjukkan dalam kode cara mengubah warna riak untuk versi pra-Lollipop dan yang lebih tinggi
AppTheme Anda harus mewarisi dari tema AppCompat apa pun dan berisi atribut colorControlHighlight (tanpa awalan 'android:')
<!-- Application theme. -->
<style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
<item name="colorControlHighlight">#40ffffff</item>
</style>
Tampilan Anda harus berisi clickable = "true" (atau harus memiliki pendengar klik yang disetel secara terprogram) dan latar belakang harus "? Attr / selectableItemBackgroundBorderless" atau "? Attr / selectableItemBackground":
<LinearLayout
...
android:clickable="true"
android:background="?attr/selectableItemBackgroundBorderless"/>
Catatan: jika tampilan induk memiliki latar belakang putih, Anda tidak akan melihat efek riak karena warnanya putih. Ubah nilai colorControlHighlight untuk warna lain
Selain itu, jika Anda menginginkan warna riak yang berbeda pada aktivitas yang berbeda, Anda dapat menyetel tema pribadi untuk setiap aktivitas dalam file Manifes, misalnya:
<activity
android:name="com.myapp.GalleryActivity"
android:theme="@style/RedRippleTheme"
/>
Warna riak yang berbeda untuk fragmen berbeda dalam aktivitas yang sama?
Anda dapat mengubah atribut Tema Aktivitas untuk setiap fragmen dalam waktu proses. Timpa saja sebelum fragmen digelembungkan dengan gaya kustom Anda dan terapkan ke Tema saat ini:
di values / styles.xml
<style name="colorControlHighlight_blue">
<item name="colorControlHighlight">@color/main_blue_alpha26</item>
</style>
Kemudian, dalam fragmen Anda sebelum inflasi onCreateView()
:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
getContext().getTheme().applyStyle(R.style.colorControlHighlight_blue, true); //blue ripple color
View view = inflater.inflate(R.layout.my_fragment_layout, container, false);
return view;
}
Gaya ini hanya akan berfungsi untuk fragmen ini
Warna riak berbeda untuk Tampilan berbeda? (Lollipop +)
Anda dapat mengubah warna riak untuk setiap tampilan secara terpisah menggunakan
colorControlHighlight
atribut, ini tidak akan berfungsi jika Anda menerapkannya ke tampilan secara langsung:
<TextView
...
colorControlHighlight="#40ffffff"/> <!-- DOESN'T WORK -->
Anda harus menerapkannya sebagai tema:
<TextView
...
android:theme="@style/colorControlHighlight_blue"/>
PS Juga, terkadang pendekatan ini membantu jika Anda memiliki masalah yang tidak diketahui dengan riak dan Anda tidak dapat mengetahuinya. Dalam kasus saya, saya menggunakan lib geser pihak ketiga yang mengacaukan efek riak untuk seluruh tata letak dan menambahkan secara eksplisit tema ini ke semua tampilan yang dapat diklik berhasil bagi saya.
colorControlHighlight
alih-alihandroid:colorControlHighlight
berfungsi lebih baik untuk saya, selain itu hanya untuk v21 +