【android蓄積】ScrolViewとListViewの問題
2639 ワード
ScrollViewとListViewを一緒に使用すると競合し、ListViewが不完全に表示されます.ネット上でどのように解決するかにも多くの例がありますが、ここでは2つの簡単な案しか言いません.
1.ListViewの高さを手動で計算する方法は以下の通りである.
ここではmeasuredHeightを用いて高さを取得するが,measuredHeightは実際の高さではないので,この方法で計算した高さは実際の高さと誤差がある.
2.ListViewのonMeasureメソッドを書き換え、各サブItemの高さを再計算する
1.ListViewの高さを手動で計算する方法は以下の通りである.
public static void setListViewHeightBasedOnChildren(ListView listView) {
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
// pre-condition
return;
}
int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
listView.setLayoutParams(params);
}
ここではmeasuredHeightを用いて高さを取得するが,measuredHeightは実際の高さではないので,この方法で計算した高さは実際の高さと誤差がある.
2.ListViewのonMeasureメソッドを書き換え、各サブItemの高さを再計算する
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// child
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}