Android: ScrollView กับ NestedScrollView


160

ความแตกต่างระหว่างScrollViewและNestedScrollViewคืออะไร? FrameLayoutทั้งของพวกเขาขยาย ฉันต้องการที่จะรู้ในเชิงลึกข้อดีและข้อเสียของพวกเขาทั้งสอง


คำตอบ:


205

NestedScrollViewเนื่องจากชื่อแนะนำถูกใช้เมื่อไม่จำเป็นต้องใช้มุมมองการเลื่อนภายในมุมมองการเลื่อนอื่น โดยทั่วไปจะทำได้ยากเนื่องจากระบบจะไม่สามารถตัดสินใจได้ว่าจะเลื่อนมุมมองใด

นี่คือที่NestedScrollViewมา


นี่คือแอปตัวอย่างที่แสดงให้เห็นถึง NestedScrollView ภายใน ScrollView หลัก: github.com/AdamSHurwitz/NestedScrolling
Adam Hurwitz

36

นอกจากนี้ยังมีการเลื่อนซ้อนกัน NestedScrollViewเพิ่มอีกหนึ่งฟังก์ชั่นหลักซึ่งแม้จะทำให้มันนอกที่น่าสนใจของบริบทที่ซ้อนกัน: OnScrollChangeListenerมีการสร้างในการสนับสนุน เพิ่มOnScrollChangeListenerไปที่เดิมScrollView ด้านล่าง API 23ต้อง subclassing ScrollViewหรือmessing รอบกับViewTreeObserverของScrollViewซึ่งมักจะหมายถึงการทำงานมากยิ่งขึ้นกว่า subclassing ด้วยNestedScrollViewมันสามารถทำได้โดยใช้setter ในตัว


26

นอกเหนือจากข้อดีที่ระบุไว้ในคำตอบที่ได้รับข้อดีอีกข้อหนึ่งของ NestedScrollView บน ScrollView คือความเข้ากันได้กับ CoordinatorLayout ScrollView ไม่ร่วมมือกับ CoordinatorLayout คุณต้องใช้ NestedScrollView เพื่อรับพฤติกรรม "เลื่อนปิดหน้าจอ" สำหรับแถบเครื่องมือ

Toolbar จะไม่ยุบด้วย Scrollview ในฐานะลูกของ CoordinatorLayout


21

NestedScrollView

NestedScrollView เป็นเหมือน ScrollView แต่รองรับการทำหน้าที่เป็นทั้งผู้ปกครองและเด็กเลื่อนการซ้อนบน Android ทั้ง Android รุ่นใหม่และเก่า การเลื่อนแบบซ้อนถูกเปิดใช้งานโดยค่าเริ่มต้น

https://developer.android.com/reference/android/support/v4/widget/NestedScrollView.html

ScrollView

คอนเทนเนอร์โครงร่างสำหรับลำดับชั้นมุมมองที่ผู้ใช้สามารถเลื่อนได้ทำให้ใหญ่กว่าจอแสดงผลแบบฟิสิคัล ScrollView เป็น FrameLayout ซึ่งหมายความว่าคุณควรให้เด็กหนึ่งคนในนั้นมีเนื้อหาทั้งหมดเพื่อเลื่อน เด็กคนนี้อาจเป็นผู้จัดการโครงร่างที่มีลำดับชั้นที่ซับซ้อนของวัตถุ

https://developer.android.com/reference/android/widget/ScrollView.html


8

NestedScrollView เป็นเหมือน ScrollView แต่ใน NestedScrollView เราสามารถใส่มุมมองการเลื่อนอื่น ๆ เป็นลูกของมันเช่น RecyclerView

แต่ถ้าเราใส่ RecyclerView ไว้ใน NestedScrollView การเลื่อนที่ราบรื่นของ RecyclerView จะถูกรบกวน ดังนั้นเพื่อให้การเลื่อนกลับราบรื่นมีเคล็ดลับ:

ViewCompat.setNestedScrollingEnabled(recyclerView, false);

ใส่บรรทัดด้านบนหลังจากตั้งค่าอะแดปเตอร์สำหรับ recyclerView


ขอบคุณมากครับ: D
Zafar Iqbal

โปรดทราบว่าการทำเช่นนี้ (recyclerView ภายใน Nested) ค่อนข้างไม่มีประสิทธิภาพในแง่ของรูปแบบการส่งผ่าน / การวัด ทดสอบและคุณจะเห็นว่า RV หยุด "รีไซเคิล" มุมมองอย่างไร
Martin Marconcini

2

ฉันคิดว่าข้อดีอย่างหนึ่งของการใช้มุมมอง Nested Scroll คือโครงร่างของ cooridinator จะรับฟังเฉพาะเหตุการณ์เลื่อนที่ซ้อนอยู่ ดังนั้นหากเป็นเช่น คุณต้องการให้แถบเครื่องมือเลื่อนลงเมื่อคุณเลื่อนเนื้อหาของกิจกรรมมันจะเลื่อนลงเมื่อคุณใช้มุมมองเลื่อนซ้อนในเค้าโครงของคุณ หากคุณใช้มุมมองการเลื่อนปกติในเค้าโครงของคุณแถบเครื่องมือจะไม่เลื่อนเมื่อผู้ใช้เลื่อนเนื้อหา

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.