10

カスタムListVAdapterを使用してAndroid ListViewの高さを見つける必要があります。各 ListView アイテムの高さを変えることができます。ここで見つけた次のコードを試しました:

public static void setListViewHeightBasedOnChildren(ListView listView) {

        ListAdapter listAdapter = listView.getAdapter(); 
        if (listAdapter == null) {
            return;
        }

        int totalHeight = 0;
        for (int i = 0; i < listAdapter.getCount(); i++) {
            View listItem = listAdapter.getView(i, null, listView);
            listItem.measure(0, MeasureSpec.UNSPECIFIED);
            totalHeight += listItem.getMeasuredHeight();
        }

        ViewGroup.LayoutParams params = listView.getLayoutParams();
        params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
        listView.setLayoutParams(params);
        listView.requestLayout();
    } 

しかし、実際の高さはわかりません。すべてのリスト項目に同じ高さを与えます。さまざまな高さのリスト項目で ListView の高さを見つけることは可能ですか?

4

4 に答える 4

15
private int getTotalHeightofListView() {

    ListAdapter LvAdapter = lv.getAdapter();
    int listviewElementsheight = 0;
    for (int i = 0; i < mAdapter.getCount(); i++) {
        View mView = mAdapter.getView(i, null, lv);
        mView.measure(
                MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
                MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
        listviewElementsheight += mView.getMeasuredHeight();
    }
    return listviewElementsheight;
}

このコードを試してください。

于 2013-01-10T17:23:24.840 に答える
2

を呼び出すとmeasure(0, MeasureSpec.UNSPECIFIED)、ビュー レイアウト システムに無限の幅を使用するように指示されます。たとえばTextViews、1 行に流れる場合があります。リストビューの幅を渡してみてください:

public static void setListViewHeightBasedOnChildren(ListView listView) {
    ListAdapter listAdapter = listView.getAdapter(); 
    int totalHeight = 0;
    int listWidth = listView.getMeasuredWidth();
    for (int i = 0; i < listAdapter.getCount(); i++) {
        View listItem = listAdapter.getView(i, null, listView);
        listItem.measure(
            MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
            MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
        totalHeight += listItem.getMeasuredHeight();
    }
    // ...update list height
} 

onMeasureまた、リスト ビューで が呼び出された後にこれを呼び出すことを確認する必要があります。そうしないと、 listView.getMeasuredWidth()0 が返されます。

于 2014-03-07T23:10:34.223 に答える
1

getHeight() を使用できます。

System.out.println("height of list view..."+listview.getHeight());

または、この回答に従ってください。

于 2013-01-10T20:07:32.867 に答える