ความแตกต่างระหว่างScrollView
และNestedScrollView
คืออะไร? FrameLayout
ทั้งของพวกเขาขยาย ฉันต้องการที่จะรู้ในเชิงลึกข้อดีและข้อเสียของพวกเขาทั้งสอง
ความแตกต่างระหว่างScrollView
และNestedScrollView
คืออะไร? FrameLayout
ทั้งของพวกเขาขยาย ฉันต้องการที่จะรู้ในเชิงลึกข้อดีและข้อเสียของพวกเขาทั้งสอง
คำตอบ:
NestedScrollView
เนื่องจากชื่อแนะนำถูกใช้เมื่อไม่จำเป็นต้องใช้มุมมองการเลื่อนภายในมุมมองการเลื่อนอื่น โดยทั่วไปจะทำได้ยากเนื่องจากระบบจะไม่สามารถตัดสินใจได้ว่าจะเลื่อนมุมมองใด
นี่คือที่NestedScrollView
มา
นอกจากนี้ยังมีการเลื่อนซ้อนกัน NestedScrollView
เพิ่มอีกหนึ่งฟังก์ชั่นหลักซึ่งแม้จะทำให้มันนอกที่น่าสนใจของบริบทที่ซ้อนกัน: OnScrollChangeListener
มีการสร้างในการสนับสนุน เพิ่มOnScrollChangeListener
ไปที่เดิมScrollView
ด้านล่าง API 23ต้อง subclassing ScrollView
หรือmessing รอบกับViewTreeObserver
ของScrollView
ซึ่งมักจะหมายถึงการทำงานมากยิ่งขึ้นกว่า subclassing ด้วยNestedScrollView
มันสามารถทำได้โดยใช้setter ในตัว
นอกเหนือจากข้อดีที่ระบุไว้ในคำตอบที่ได้รับข้อดีอีกข้อหนึ่งของ NestedScrollView บน ScrollView คือความเข้ากันได้กับ CoordinatorLayout ScrollView ไม่ร่วมมือกับ CoordinatorLayout คุณต้องใช้ NestedScrollView เพื่อรับพฤติกรรม "เลื่อนปิดหน้าจอ" สำหรับแถบเครื่องมือ
Toolbar จะไม่ยุบด้วย Scrollview ในฐานะลูกของ CoordinatorLayout
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
NestedScrollView เป็นเหมือน ScrollView แต่ใน NestedScrollView เราสามารถใส่มุมมองการเลื่อนอื่น ๆ เป็นลูกของมันเช่น RecyclerView
แต่ถ้าเราใส่ RecyclerView ไว้ใน NestedScrollView การเลื่อนที่ราบรื่นของ RecyclerView จะถูกรบกวน ดังนั้นเพื่อให้การเลื่อนกลับราบรื่นมีเคล็ดลับ:
ViewCompat.setNestedScrollingEnabled(recyclerView, false);
ใส่บรรทัดด้านบนหลังจากตั้งค่าอะแดปเตอร์สำหรับ recyclerView
ฉันคิดว่าข้อดีอย่างหนึ่งของการใช้มุมมอง Nested Scroll คือโครงร่างของ cooridinator จะรับฟังเฉพาะเหตุการณ์เลื่อนที่ซ้อนอยู่ ดังนั้นหากเป็นเช่น คุณต้องการให้แถบเครื่องมือเลื่อนลงเมื่อคุณเลื่อนเนื้อหาของกิจกรรมมันจะเลื่อนลงเมื่อคุณใช้มุมมองเลื่อนซ้อนในเค้าโครงของคุณ หากคุณใช้มุมมองการเลื่อนปกติในเค้าโครงของคุณแถบเครื่องมือจะไม่เลื่อนเมื่อผู้ใช้เลื่อนเนื้อหา