我有一个带对话框主题的活动。它的布局有3个部分
标题
BODY(有ListView)
确定按钮
这必须始终是我的布局结构。如果我使用以下布局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中只有一个项目,布局的高度也会全屏显示。
我应该如何构建我的xml,以便根据内容包装其高度,并且OK按钮始终可见,与ListView中的项目数无关?
答案 0 :(得分:0)
默认情况下你应该把params作为, 标题 - 顶部对齐 正文(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适配器。
也会检查这个,将按钮高度添加到总高度。