問題: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;
android:layout_height="wrap_content",升級後直接可用。推薦方案 2:單一 RecyclerView 承載所有內容,效能最佳、架構最清晰。