Như đã trả lời, giải pháp đơn giản nhất là chỉ cần thêm một trong những thứ sau làm RecyclerView
nền cho hàng của bạn :
android:background="?android:attr/selectableItemBackground"
android:background="?attr/selectableItemBackground"
Tuy nhiên nếu bạn đang gặp sự cố với phương pháp này hoặc nếu bạn muốn kiểm soát màu sắc tốt hơn, thì bạn có thể làm như sau.
Hiệu ứng Ripple tùy chỉnh
Câu trả lời này bắt đầu với ví dụ Android RecyclerView đơn giản này . Nó sẽ giống như hình ảnh sau đây.
Thêm bộ chọn cho các thiết bị trước API 21
Trước API 21 (Android 5.0 Lollipop), nhấp vào một RecyclerView
mục chỉ thay đổi màu nền của nó (không có hiệu ứng gợn sóng). Đó cũng là những gì chúng tôi sẽ làm. Nếu bạn vẫn có người dùng với các thiết bị đó, họ đã quen với hành vi đó, vì vậy chúng tôi sẽ không lo lắng về họ quá nhiều. (Tất nhiên, nếu bạn thực sự muốn có hiệu ứng gợn sóng cho chúng, bạn có thể sử dụng thư viện tùy chỉnh .)
Nhấp chuột phải vào res/drawable
thư mục của bạn và chọn Mới> Tệp tài nguyên có thể vẽ . Gọi nó đicustom_ripple
. Nhấp vào OK và dán mã sau vào.
custom_ripple.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape android:shape="rectangle">
<solid android:color="@color/colorAccent" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="@android:color/transparent" />
</shape>
</item>
</selector>
Tôi đã sử dụng colorAccent
làm màu đánh dấu cho trạng thái được ép bởi vì nó đã có sẵn, nhưng bạn có thể xác định bất kỳ màu nào bạn muốn.
Thêm hiệu ứng Ripple cho các thiết bị API 21+
Nhấp chuột phải vào res/drawable
thư mục của bạn và chọn Mới> Tệp tài nguyên có thể vẽ . Gọi custom_ripple
lại lần nữa. Tuy nhiên, đừng nhấp vào OK, nhưng lần này. Từ vòng loại sẵn danh sách chọn bản , sau đó nhấp vào >> nút và ghi 21
cho cấp API nền tảng . Bây giờ hãy nhấp vào OK và dán mã sau vào.
v21 / custom_ripple.xml
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/colorAccent">
<item
android:id="@android:id/mask"
android:drawable="@android:color/white" />
</ripple>
Một lần nữa, tôi đã sử dụng colorAccent
cho màu gợn sóng vì nó có sẵn, nhưng bạn có thể sử dụng bất kỳ màu nào bạn muốn. Mặt nạ giới hạn hiệu ứng gợn sóng chỉ với bố cục hàng. Màu mặt nạ dường như không quan trọng vì vậy tôi chỉ sử dụng một màu trắng đục.
Đặt làm nền
Trong bố cục gốc của mục RecyclerView của bạn, hãy đặt nền thành gợn sóng tùy chỉnh mà chúng tôi đã tạo.
android:background="@drawable/custom_ripple"
Trong dự án ví dụ mà chúng tôi đã bắt đầu, nó trông giống như sau:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="@drawable/custom_ripple"
android:padding="10dp">
<TextView
android:id="@+id/tvAnimalName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"/>
</LinearLayout>
Đã kết thúc
Đó là nó. Bạn sẽ có thể chạy dự án của mình ngay bây giờ. Cảm ơn câu trả lời này và video YouTube này để được trợ giúp.
CardView
câu hỏi đó hơn là không liên quan đến câu hỏi tổng quát hơn này.