首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android 淘寶式下拉浮動列表實現:HeaderView 與滑動監聽完整方案

     編輯:程式設計疑難解答

效果拆解

淘寶 App 頂部固定按鈕區域,下拉時列表內容上浮,按鈕區域保持固定或隨列表滑動,典型的「HeaderView + ListView/RecyclerView」組合模式。

核心實現方案

方案一:ListView.addHeaderView()(傳統)

View header = LayoutInflater.from(context).inflate(R.layout.header_layout, listView, false);
listView.addHeaderView(header);
// header 會隨列表一起滑動,置頂需配合 OnScrollListener 判斷位置

方案二:RecyclerView + ItemType 區分(現代推薦)

// Adapter 重寫 getItemViewType
@Override
public int getItemViewType(int position) {
    return position == 0 ? TYPE_HEADER : TYPE_ITEM;
}

// onCreateViewHolder 根據 type 加載不同布局
// 滑動監聽中動態調整 Header 狀態(固定/浮動/隱藏)

方案三:CoordinatorLayout + AppBarLayout + CollapsingToolbarLayout(Material Design)

  • 將頂部按鈕區域放入 CollapsingToolbarLayout。
  • 列表使用 NestedScrollView 或 RecyclerView。
  • 配置 app:layout_scrollFlags="scroll|exitUntilCollapsed" 實現自動折疊/展開。

關鍵技術點

  1. 滑動監聽:OnScrollListener / OnScrollChangeListener 獲取 dy 判斷方向。
  2. 視圖狀態機:定義 Header 狀態(EXPANDED, COLLAPSING, COLLAPSED, HIDDEN)並平滑過渡。
  3. 手勢衝突處理:嵌套滑動時需正確分發 onInterceptTouchEvent / onTouchEvent。

進階優化

  • 使用 MotionLayout 實現複雜動畫(按鈕縮放、透明度漸變)。
  • 列表數據量大時啟用 RecyclerView 緩存與預加載。
  • 配合 SmartRefreshLayout 實現下拉刷新與 Header 聯動。

選擇方案取決於項目最低 API 級別、UI 複雜度及維護成本。現代項目首選 CoordinatorLayout 或 RecyclerView 多類型方案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved