我正在使用我自己的Dialog
子类并试图以这样的方式构建它:如果没有足够的内容来填充屏幕,它将缩小以适应内容(即wrap_content
)。我可以使用以下布局执行此操作:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/dialog_bg">
<RelativeLayout
android:id="@+id/title_container"
android:layout_width="match_parent"
android:layout_height="60dp"
android:gravity="center_vertical"
android:background="@drawable/dialog_title_bg">
. . .
</RelativeLayout>
<LinearLayout
android:id="@+id/button_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/content"
android:orientation="horizontal">
. . .
</LinearLayout>
<FrameLayout
android:id="@+id/content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/title_container">
</FrameLayout>
</RelativeLayout>
(我删除了那些 - 我认为 - 并不重要)。当内容未填满屏幕时,此功能非常有用:
但是当内容很大时,它会将按钮从底部推开:
稍作调整,我更改了button_container
,因此它已layout_alignParentBottom="true"
而content
,如下所示:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/dialog_bg">
<RelativeLayout
android:id="@+id/title_container"
android:layout_width="match_parent"
android:layout_height="60dp"
android:gravity="center_vertical"
android:background="@drawable/dialog_title_bg">
. . .
</RelativeLayout>
<LinearLayout
android:id="@+id/button_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal">
. . .
</LinearLayout>
<FrameLayout
android:id="@+id/content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/title_container"
android:layout_above="@+id/button_container">
</FrameLayout>
</RelativeLayout>
现在它适用于内容对于屏幕来说太大的时候:
但是当内容没有填满屏幕时,对话框仍然会显示:
我怎样才能充分利用这两个世界?我可以在代码中通过将“maxHeight”设置为屏幕的高度减去对话框边框以及标题和按钮的高度来实现,但这对我来说似乎有些笨拙。我试着看看AlertDialog的实现(它似乎正确地处理了这种情况),但对我来说它看起来像黑魔法......
编辑按要求,这是我添加到FrameLayout
的布局文件的内容,代表对话框的“内容”:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<ListView
android:id="@+id/report_items"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true" />
</RelativeLayout>
答案 0 :(得分:0)
而不是框架布局,更好地使用线性。它会工作..如果你发布xml代码然后我可以检查..