需求:頁面頂部為 ABC 三個區域(Header),下方 D 區域為 ListView。向上滑動 ListView 時 ABC 隨之向上滑出螢幕(相當於 ListView 的 HeaderView);ListView 向左/右滑動時,B、C 區域的選中狀態需跟著切換(類似 Tab 切換)。
這是一個經典的「黏性標題 + 水平頁籤聯動」場景,推薦參考成熟開源實作:
CoordinatorLayout + AppBarLayout + TabLayout + ViewPager(內嵌 RecyclerView)。AppBarLayout 設定 app:layout_scrollFlags="scroll|exitUntilCollapsed" 實現 Header 隨列表滑動隱藏;TabLayout 與 ViewPager 綁定實現左右滑動切換 Tab 狀態。NestedScrollView 包裹頂部 Header 與底部 RecyclerView,透過 OnScrollChangeListener 監聽滑動位移動態調整 Header 透明度/位移;水平滑動用 ViewPager2 或 RecyclerView (LinearLayoutManager.HORIZONTAL) 實現 Tab 切換。完整實作可參考:Android 粘性標題+ViewPager聯動效果完整解析(含原始碼下載)。
NestedScrollView/CoordinatorLayout 消費,水平滑動由內部 ViewPager/RecyclerView 消費,需正確配置 nestedScrollingEnabled。translationY、alpha 或高度,實現「推上去」效果。ViewPager.OnPageChangeListener 中更新 B、C 區域的視覺選中狀態(文字顏色、指示器位置等)。採用 Material Design 元件庫(com.google.android.material)可大幅減少自定義 View 的開發量,獲得流暢、符合規範的交互體驗。