0

ダイアログをテーマにした活動があります。そのレイアウトには 3 つの部分があります


ヘッダ



本文 (リストビューあり)



OKボタン


これは常に私のレイアウトの構造でなければなりません。次のレイアウト xml を使用する場合:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dip" >

<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <ImageView
        android:id="@+id/iv_av_logo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="4dip"
        android:layout_marginTop="2dip"
        android:paddingLeft="6dip"
        android:src="@drawable/tablet_ic_logo" />

    <RelativeLayout
        android:id="@+id/rl_av_found"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/iv_av_logo"
        android:layout_marginBottom="5dip"
        android:paddingLeft="16dip" >

        <TextView
            android:id="@+id/tv_av_found"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/orange"
            android:textSize="22dp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/tv_av_recommendation"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/tv_av_found"
            android:layout_marginBottom="8dip"
            android:textColor="@color/white"
            android:textSize="13dp"
            android:visibility="gone" />
    </RelativeLayout>

    <LinearLayout
        android:id="@+id/ll_av_body"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/rl_av_found"
        android:background="@drawable/tablet_dialog_glow" >

        <ListView
            android:id="@+id/lv_av_threats_found"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:cacheColorHint="#00000000"
            android:divider="@drawable/tablet_dialog_separator" >
        </ListView>
    </LinearLayout>

    <RelativeLayout
        android:id="@+id/rl_button_bar"
        android:layout_width="wrap_content"
        android:layout_height="70dip"
        android:layout_below="@id/ll_av_body" >

        <Button
            android:id="@+id/btn_av_ok"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:onClick="onClick"
            android:text="@string/btn_ok" />

        <ImageView
            android:id="@+id/iv_separator"
            android:layout_width="match_parent"
            android:layout_height="1dip"
            android:layout_alignParentTop="true"
            android:background="@drawable/tablet_dialog_footer" />
    </RelativeLayout>
</RelativeLayout>

それは私が欲しいものを与えてくれます。しかし、リストが大きくなり、たとえば 100 個のアイテムがあると、[OK] ボタンが表示されなくなります。

そして、このレイアウトを使用すると:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dip" >

<RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" >

    <ImageView
        android:id="@+id/iv_av_logo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="4dip"
        android:layout_marginTop="2dip"
        android:paddingLeft="6dip"
        android:src="@drawable/tablet_ic_logo" />

    <RelativeLayout
        android:id="@+id/rl_av_found"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/iv_av_logo"
        android:layout_marginBottom="5dip"
        android:paddingLeft="16dip" >

        <TextView
            android:id="@+id/tv_av_found"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/orange"
            android:textSize="22dp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/tv_av_recommendation"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/tv_av_found"
            android:layout_marginBottom="8dip"
            android:textColor="@color/white"
            android:textSize="13dp"
            android:visibility="gone" />
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/rl_button_bar"
        android:layout_width="wrap_content"
        android:layout_height="70dip"
        android:layout_alignParentBottom="true" >

        <Button
            android:id="@+id/btn_av_ok"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:onClick="onClick"
            android:text="@string/btn_ok" />

        <ImageView
            android:id="@+id/iv_separator"
            android:layout_width="match_parent"
            android:layout_height="1dip"
            android:layout_alignParentTop="true"
            android:background="@drawable/tablet_dialog_footer" />
    </RelativeLayout>

    <LinearLayout
        android:id="@+id/ll_av_threats"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_above="@id/rl_button_bar"
        android:layout_below="@id/rl_av_found"
        android:background="@drawable/tablet_dialog_glow" >

        <ListView
            android:id="@+id/lv_av_found"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:cacheColorHint="#00000000"
            android:divider="@drawable/tablet_dialog_separator" >
        </ListView>
    </LinearLayout>
</RelativeLayout>

[OK] ボタンは常に画面の下部に表示され、ListView に項目が 1 つしかない場合でも、レイアウトの高さが全画面表示になります。

ListView 内のアイテムの数に関係なく、コンテンツに応じて高さをラップし、[OK] ボタンを常に表示するように xml を構成するにはどうすればよいですか?

4

1 に答える 1

0

デフォルトでは、ヘッダー - 上に揃える 本文 (ListView) - ヘッダーの下、ボタン - 本文の下 (ListView) のようにパラメーターを設定する必要があります。

実行時に、リスト ビューの高さを取得する必要があります。それが画面を超える場合は、ボタンのレイアウト パラメータを alignParentBottom に設定し、リスト ビューのレイアウト パラメータをヘッダーの下とボタンの上に設定します。これを逆に使用することもできます。

リスト ビューの高さを取得します。これを使って

public int getTotalListViewHeight(ListView lv, BaseAdapter ba) {
        int listviewElementsheight = 0;
        for (int i = 0; i < ba.getCount(); i++) {
            View view = ba.getView(i, null, lv);
            view.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED),
                                MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
            listviewElementsheight += view.getMeasuredHeight();
            // for Width use view.getMeasuredWidth()
        }
        return listviewElementsheight;
    }

ここでのアダプターは listviews アダプターです。

これもチェックし、ボタンの高さを合計の高さに追加します。

于 2012-10-30T15:15:05.737 に答える