読者です 読者をやめる 読者になる 読者になる

And Q.

思ったことを書きます

ListViewの要素数に応じてViewの高さを変える

Android

基本的にListViewの高さって固定されるものだと思うんですけど、要素の数に応じて変えたい時もあります。
そんな時は
・ListViewの1つのアイテムの高さを所得して
・それ*要素数をHeightに設定
するといいんじゃないかと思って調べてみました。
こんな感じでいけるみたいです。

レイアウト

            <LinearLayout
                android:id="@+id/wrapper"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content" >

                <ListView
                    android:id="@+id/list"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content" />
            </LinearLayout>

コード

        ListView lv = (ListView) findViewById(R.id.list);
        View lvItem = lv.getAdapter()
                .getView(0, null, lv);
        lvItem.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
                MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));

        int lvItemHeight = lvItem.getMeasuredHeight();
        int lvWrapperHeight = lvItemHeight * lv.getCount();
        LinearLayout lvWrapper = (LinearLayout) findViewById(R.id.wrapper);
        lvWrapper.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,
                lvWrapperHeight));