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

ScrollView 嵌套 RecyclerView 獲取總高度方案

     編輯:程式設計疑難解答

問題:ScrollView 包裹 RecyclerView 時,外層無法滾動,因 RecyclerView 高度為 0 或 wrap_content 無效。

核心原因

RecyclerView 依賴 LayoutManager 測量,wrap_content 在舊版支援庫中不支援,需手動計算總高度。

計算公式

int totalHeight = 0;
for (int i = 0; i < adapter.getItemCount(); i++) {
    View view = adapter.createViewHolder(recyclerView, adapter.getItemViewType(i)).itemView;
    adapter.bindViewHolder(adapter.createViewHolder(recyclerView, adapter.getItemViewType(i)), i);
    view.measure(View.MeasureSpec.makeMeasureSpec(recyclerView.getWidth(), View.MeasureSpec.EXACTLY),
                 View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
    totalHeight += view.getMeasuredHeight();
}
// 加上分隔線高度
totalHeight += recyclerView.getItemDecorationHeight() * (adapter.getItemCount() - 1);
recyclerView.getLayoutParams().height = totalHeight;

更簡單的替代方案

  • NestedScrollView + RecyclerView(支援巢狀滾動,API 21+)。
  • RecyclerView 內部用多型別 ViewHolder,將原本 ScrollView 內容做成 Header/Footer ViewHolder,完全移除 ScrollView。
  • 支援庫 23.2+ 已支援 android:layout_height="wrap_content",升級後直接可用。

推薦方案 2:單一 RecyclerView 承載所有內容,效能最佳、架構最清晰。

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