AndroidレイアウトにおけるScrolViewとListViewの競合の最も簡単な方法
1880 ワード
ネット上で流行っている使い方の一つは
これは面倒くさいし、効果も明らかではありません.
以下のようにまとめられています.
ListViewのAdapterを設定した後にこの静的メソッドを呼び出すと、ListViewが親ListViewのListItemに正しく表示されます.ただし、サブListViewの各ItemはLinearLayoutでなければならないので、他のLayout(RelativeLayoutなど)はonMeasure()を書き換えていないため、onMeasure()で異常を投げ出すことに注意してください.
ScrollViewにListView(またはScrollView)がネストされているもう一つの問題は、サブScrollViewではスライドできない(完全に表示されていない場合)ことです.スライドイベントは親ScrollViewに食べられるので、サブScrollViewでもスライドできるようにするには、スライドイベントを強引に切り取るしかありません.牛の人がフォーラムでコードを送ったことがあります.自分でやってみたことはありませんが、できると思います.
ScrollViewでは、技術的な難題を解決するためにScrollViewが表示されますが、このような設計は、サブScrollViewの内容を容易に見ることができず、操作することができないため、非常に悪いユーザー体験です.たとえば、親ListViewの各Itemは概括的な記述のみを表示し、そのItemをクリックすると別のページに進み、このItemに対する操作を詳細に説明し、表示するように設計されています.
そこで、他の2つの簡単な方法を見つけました.そして、影響はありません.
1.ScrollViewに属性androidを追加する:fillViewport="true"でListViewをフルスクリーン表示できる
2.ListViewの高さを指定android:layout_height="420dp";
public class Utility {
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);
}
}
これは面倒くさいし、効果も明らかではありません.
以下のようにまとめられています.
ListViewのAdapterを設定した後にこの静的メソッドを呼び出すと、ListViewが親ListViewのListItemに正しく表示されます.ただし、サブListViewの各ItemはLinearLayoutでなければならないので、他のLayout(RelativeLayoutなど)はonMeasure()を書き換えていないため、onMeasure()で異常を投げ出すことに注意してください.
ScrollViewにListView(またはScrollView)がネストされているもう一つの問題は、サブScrollViewではスライドできない(完全に表示されていない場合)ことです.スライドイベントは親ScrollViewに食べられるので、サブScrollViewでもスライドできるようにするには、スライドイベントを強引に切り取るしかありません.牛の人がフォーラムでコードを送ったことがあります.自分でやってみたことはありませんが、できると思います.
ScrollViewでは、技術的な難題を解決するためにScrollViewが表示されますが、このような設計は、サブScrollViewの内容を容易に見ることができず、操作することができないため、非常に悪いユーザー体験です.たとえば、親ListViewの各Itemは概括的な記述のみを表示し、そのItemをクリックすると別のページに進み、このItemに対する操作を詳細に説明し、表示するように設計されています.
そこで、他の2つの簡単な方法を見つけました.そして、影響はありません.
1.ScrollViewに属性androidを追加する:fillViewport="true"でListViewをフルスクリーン表示できる
2.ListViewの高さを指定android:layout_height="420dp";