這篇純粹拾人牙慧,來源是 How can I put a ListView into a ScrollView without it collapsing?
如同大家知道的的,ListView 放入 ScrollView 之後就變成疊起來的狀態
實際上 ListView 本身就能夠 scroll,只要將 layout_height 設定成 wrap_content 就可以了
把兩個具有 scroll 能力的元件疊加使用反而會沒辦法正常顯示
但有時候你想做的會是將複數個 ListView 並排展開
外面再包一層 ScrollView 讓一次就能捲動所有的 ListView
這時候就需要一些特殊技巧處理
提醒如果你要製作的排版並不複雜
也許只需要透過 ListView 的 addHeaderView、addFooterView 就能滿足需求
如果你要捲動的範圍內包含了文字、圖片、很多個ListView等複雜的排版,才建議使用這個方式
public static void setListViewHeightBasedOnChildren(ListView listView) {
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
// pre-condition
return;
}
int totalHeight = listView.getPaddingTop() + listView.getPaddingBottom();
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
if (listItem instanceof ViewGroup) {
listItem.setLayoutParams(new AbsListView.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, AbsListView.LayoutParams.WRAP_CONTENT));
}
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
listView.setLayoutParams(params);
}
這個static method可以重新計算ListView應有的高度
因為 ScrollView 內只能有一個子元件
透過 Layout 元件包覆了你想捲動的所有元件後,再包上一層 ScrollView
之後設定完所有的 ListView 的 adapter 後,再透過此 method 一一重新設定 ListView 的高度
這樣就能在ScrollView中捲動具有原本正常高度的 ListView 囉
如同大家知道的的,ListView 放入 ScrollView 之後就變成疊起來的狀態
實際上 ListView 本身就能夠 scroll,只要將 layout_height 設定成 wrap_content 就可以了
把兩個具有 scroll 能力的元件疊加使用反而會沒辦法正常顯示
但有時候你想做的會是將複數個 ListView 並排展開
外面再包一層 ScrollView 讓一次就能捲動所有的 ListView
這時候就需要一些特殊技巧處理
提醒如果你要製作的排版並不複雜
也許只需要透過 ListView 的 addHeaderView、addFooterView 就能滿足需求
如果你要捲動的範圍內包含了文字、圖片、很多個ListView等複雜的排版,才建議使用這個方式
public static void setListViewHeightBasedOnChildren(ListView listView) {
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
// pre-condition
return;
}
int totalHeight = listView.getPaddingTop() + listView.getPaddingBottom();
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
if (listItem instanceof ViewGroup) {
listItem.setLayoutParams(new AbsListView.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, AbsListView.LayoutParams.WRAP_CONTENT));
}
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
listView.setLayoutParams(params);
}
這個static method可以重新計算ListView應有的高度
因為 ScrollView 內只能有一個子元件
透過 Layout 元件包覆了你想捲動的所有元件後,再包上一層 ScrollView
之後設定完所有的 ListView 的 adapter 後,再透過此 method 一一重新設定 ListView 的高度
這樣就能在ScrollView中捲動具有原本正常高度的 ListView 囉
謝謝你 這是可行的~~
回覆刪除卡在這個地方了很久了..終於..太感動了!! 謝謝你!!
回覆刪除