Hiệu ứng gợn sóng trên các thiết bị trước và Lollipop +
harrane và Liuting đúng. Câu trả lời được chấp nhận không phải là cách tốt nhất. Hãy để tôi chỉ trong mã cách thay đổi màu gợn sóng cho các phiên bản trước Lollipop và cao hơn
AppTheme của bạn phải kế thừa từ bất kỳ chủ đề AppCompat nào và chứa thuộc tính colorControlHighlight (không có tiền tố 'android:')
<!-- Application theme. -->
<style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
<item name="colorControlHighlight">#40ffffff</item>
</style>
Chế độ xem của bạn phải chứa clickable = "true" (hoặc phải có trình xử lý nhấp chuột được đặt theo chương trình) và nền phải là "? Attr / selectableItemBackgroundBorderless" hoặc "? Attr / selectableItemBackground":
<LinearLayout
...
android:clickable="true"
android:background="?attr/selectableItemBackgroundBorderless"/>
Lưu ý: nếu chế độ xem gốc của bạn có nền trắng, bạn sẽ không thấy hiệu ứng gợn sóng vì nó có màu trắng. Thay đổi giá trị colorControlHighlight cho một màu khác
Ngoài ra, nếu bạn muốn các màu gợn khác nhau trên các hoạt động khác nhau, bạn có thể đặt chủ đề cá nhân cho từng hoạt động trong tệp Manifest, ví dụ:
<activity
android:name="com.myapp.GalleryActivity"
android:theme="@style/RedRippleTheme"
/>
Màu gợn khác nhau cho các mảnh khác nhau trong cùng một hoạt động?
Bạn có thể thay đổi các thuộc tính của Chủ đề hoạt động cho từng phân đoạn trong thời gian chạy. Chỉ cần ghi đè chúng trước khi phân đoạn được thổi phồng với phong cách tùy chỉnh của bạn và áp dụng cho Chủ đề hiện tại:
trong giá trị / styles.xml
<style name="colorControlHighlight_blue">
<item name="colorControlHighlight">@color/main_blue_alpha26</item>
</style>
Sau đó, trong phần của bạn trước khi lạm phát trong 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;
}
Kiểu này sẽ chỉ hoạt động cho phân đoạn này
Màu gợn khác nhau cho các Chế độ xem khác nhau? (Kẹo mút +)
Bạn có thể thay đổi màu gợn sóng cho từng chế độ xem riêng biệt bằng cách sử dụng
colorControlHighlight
thuộc tính, nó không hoạt động nếu bạn áp dụng chúng cho chế độ xem trực tiếp:
<TextView
...
colorControlHighlight="#40ffffff"/> <!-- DOESN'T WORK -->
bạn nên áp dụng nó như một chủ đề:
<TextView
...
android:theme="@style/colorControlHighlight_blue"/>
PS Ngoài ra, đôi khi cách tiếp cận này hữu ích nếu bạn gặp vấn đề không xác định với ripple và bạn không thể tìm ra. Trong trường hợp của tôi, tôi đã sử dụng lib trượt của bên thứ ba, điều này làm rối tung các hiệu ứng gợn sóng cho toàn bộ bố cục và thêm chủ đề này một cách rõ ràng vào tất cả các chế độ xem có thể nhấp đã làm việc cho tôi.
colorControlHighlight
thay vìandroid:colorControlHighlight
hoạt động tốt hơn đối với tôi, nếu không thì nó chỉ dành cho v21 +