ตามที่ตอบไปแล้ววิธีแก้ปัญหาที่ง่ายที่สุดคือเพิ่มสิ่งใดสิ่งหนึ่งต่อไปนี้เป็นRecyclerView
พื้นหลังของแถวของคุณ:
android:background="?android:attr/selectableItemBackground"
android:background="?attr/selectableItemBackground"
อย่างไรก็ตามหากคุณกำลังประสบปัญหากับวิธีนี้หรือหากคุณต้องการควบคุมสีให้ละเอียดขึ้นคุณสามารถทำสิ่งต่อไปนี้ได้
เอฟเฟกต์ระลอกที่กำหนดเอง
คำตอบนี้จะเริ่มต้นด้วยการที่เรียบง่ายเช่น Android RecyclerView นี้ จะมีลักษณะดังภาพต่อไปนี้
เพิ่มตัวเลือกสำหรับอุปกรณ์ก่อน API 21
ก่อน API 21 (Android 5.0 Lollipop) การคลิกRecyclerView
รายการเพิ่งเปลี่ยนสีพื้นหลัง (ไม่มีเอฟเฟกต์การกระเพื่อม) นั่นคือสิ่งที่เรากำลังจะทำเช่นกัน หากคุณยังคงมีผู้ใช้อยู่กับอุปกรณ์เหล่านั้นพวกเขาคุ้นเคยกับพฤติกรรมดังกล่าวดังนั้นเราจะไม่กังวลกับพวกเขามากเกินไป (แน่นอนว่าหากคุณต้องการเอฟเฟกต์ระลอกคลื่นสำหรับพวกเขาจริงๆคุณสามารถใช้ไลบรารีที่กำหนดเองได้)
คลิกขวาที่res/drawable
โฟลเดอร์ของคุณแล้วเลือกใหม่> ไฟล์ทรัพยากรที่วาดได้ เรียกมันcustom_ripple
. คลิกตกลงและวางรหัสต่อไปนี้
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>
ฉันใช้colorAccent
เป็นสีไฮไลต์สำหรับสถานะกดเนื่องจากมีอยู่แล้ว แต่คุณสามารถกำหนดสีที่คุณต้องการได้
เพิ่ม Ripple Effect สำหรับอุปกรณ์ API 21+
คลิกขวาที่res/drawable
โฟลเดอร์ของคุณแล้วเลือกใหม่> ไฟล์ทรัพยากรที่วาดได้ เรียกcustom_ripple
อีกอย่าง. อย่าคลิกตกลง แต่คราวนี้ จากที่มีอยู่รอบคัดเลือกรายการเลือกรุ่นแล้วคลิก>>ปุ่มและเขียน21
สำหรับระดับแพลตฟอร์ม API ตอนนี้คลิกตกลงและวางรหัสต่อไปนี้
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>
อีกครั้งฉันใช้colorAccent
สำหรับสีระลอกเพราะมีให้เลือก แต่คุณสามารถใช้สีอะไรก็ได้ที่คุณต้องการ มาสก์จะ จำกัด เอฟเฟกต์ระลอกคลื่นให้อยู่ในเค้าโครงแถวเท่านั้น เห็นได้ชัดว่าสีของหน้ากากไม่สำคัญดังนั้นฉันจึงใช้สีขาวขุ่น
ตั้งเป็นพื้นหลัง
ในเค้าโครงรูทของรายการ RecyclerView ของคุณให้ตั้งค่าพื้นหลังเป็นระลอกที่กำหนดเองที่เราสร้างขึ้น
android:background="@drawable/custom_ripple"
ในโครงการตัวอย่างที่เราเริ่มต้นมีลักษณะดังนี้:
<?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>
เสร็จแล้ว
แค่นั้นแหละ. คุณควรจะดำเนินโครงการได้แล้ว ขอบคุณสำหรับคำตอบนี้และวิดีโอ YouTube นี้สำหรับความช่วยเหลือ
CardView
คำถามนั้นมากกว่าที่จะไม่เกี่ยวข้องกับคำถามทั่วไปนี้