ユーザーにプロファイル画面を表示したい。
そのユーザーが作成したコンテンツを表示するには、3つのビュー(2 Buttons
とImageView
)とListView
が必要です。
ただし、ListView
をスクロールさせたくありません。代わりに、必要なだけ大きくして、すべてのビューをScrollView
内に配置するため、最初の3つのビューはListView
でスクロールアウトします。もちろん、これは意図したとおりには機能しません。
3つのアイテムはすべてLinearLayout
の中にあります。私はそれらをListView
の最初のアイテムにすることを考えましたが、これはそれらを最初のアイテムとして選択可能にし、不必要なコーディングをしなければならないことにつながります。
これを簡単に行う方法はありますか、それともレイアウトをリストビューの最初のアイテムにすることに固執する必要がありますか?
それらを最初のアイテムとしてリストビューに追加することは、かなり良い解決策のようです。
ビューを選択不可にするには、ビューと.setClickable(false)
を取得します。
このための非常に簡単な解決策を見つけました。リストビューのアダプターを取得し、すべてのアイテムが表示されたときにそのサイズを計算します。利点は、このソリューションがScrollView内でも機能することです。
例:
public static void justifyListViewHeightBasedOnChildren (ListView listView) {
ListAdapter adapter = listView.getAdapter();
if (adapter == null) {
return;
}
ViewGroup vg = listView;
int totalHeight = 0;
for (int i = 0; i < adapter.getCount(); i++) {
View listItem = adapter.getView(i, null, vg);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams par = listView.getLayoutParams();
par.height = totalHeight + (listView.getDividerHeight() * (adapter.getCount() - 1));
listView.setLayoutParams(par);
listView.requestLayout();
}
ListViewオブジェクトを渡してこの関数を呼び出します。
justifyListViewHeightBasedOnChildren(myListview);
上記の関数は、投稿の修正です。 リストビューでのスクロールを無効にする
アダプタをリストビューに設定した後、この関数を呼び出すことに注意してください。アダプタのエントリのサイズが変更された場合、この関数も呼び出す必要があります。
View
の上に背景が見えないListView
を追加します。 View.OnTouchListener()
を設定します。 onTouch()
のView.OnTouchListener()
メソッドでtrue
を返すことにより、イベントを消費します。
リストを再度スクロールして戻す場合は、透明なView
に設定されているタッチリスナーを削除します
リストビューで限られた数のアイテムを表示する必要があり、リストビューのスクロールを停止する場合は、リストビューの高さをアイテムの合計の高さよりも大きくする必要があります。
たとえば、3つのアイテムを表示するとします。 (行の高さは30です)。アイテムの合計の高さは3 x 30dp = 90dpになり、
したがって、リストビューの高さを90より大きく設定する必要があります。例:100dp。そのため、リストビューはどの場合でもスクロールしません。
最良の方法は、2つのボタンと画像ビューをLinearLayout(または必要に応じてレイアウト)に配置し、addHeaderViewメソッドを使用してこのレイアウトをリストヘッダーとして追加することだと思います。
http://developer.Android.com/reference/Android/widget/ListView.html#addHeaderView(Android.view.View )
次の指示で:
name_lista.getLayoutParams (). height = new_size
new_sizeは、リストの要素の数に従って計算する変数です。次に例を示します。
new_size = 100 * list_size;