18

リストに実際の項目がない場合、コードで ListViewItem の高さを取得する方法はありますか?

私の ListViewItem レイアウト:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="?android:attr/listPreferredItemHeight">
...
</LinearLayout>  

Inflater を使用して取得しようとしました:

View convertView = LayoutInflater.from( this )
    .inflate( R.layout.mail_list_row, null );
int itemHeight = convertView.getHeight();

しかし、それは戻り値 0 です。

ありがとう!

4

4 に答える 4

44

これを試してください、それはあなたのために働くでしょう.

private static final int UNBOUNDED = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);

// To calculate the total height of all items in ListView call with items = adapter.getCount()
public static int getItemHeightofListView(ListView listView, int items) {
    ListAdapter adapter = listView.getAdapter();

    int grossElementHeight = 0;
    for (int i = 0; i < items; i++) {
        View childView = adapter.getView(i, null, listView);
        childView.measure(UNBOUNDED, UNBOUNDED);
        grossElementHeight += childView.getMeasuredHeight();
    }
    return grossElementHeight;
}
于 2012-09-20T13:39:21.460 に答える
12

Dwivedi Ji仕切りの高さを持ち、不要なパラメーターを含まない のコードの最適化されたバージョン:

private int calculateHeight(ListView list) {

    int height = 0;

    for (int i = 0; i < list.getCount(); i++) {
        View childView = list.getAdapter().getView(i, null, list);
        childView.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
        height+= childView.getMeasuredHeight();
    }

    //dividers height
    height += list.getDividerHeight() * list.getCount();

    return height;
}
于 2014-10-07T12:57:31.260 に答える
5

Androidでは、レンダリングが完了したときにのみ、ビューに幅と高さが割り当てられます。したがって、リストが少なくとも一度レンダリングされない限り、listItemHeightは取得されません。問題の解決策は、リストアイテムの最小の高さを設定して、ハードコーディングの高さと幅の代わりに少なくとも何かを操作できるようにすることです。

于 2010-07-29T13:23:44.193 に答える