自定义对话框高度以匹配内容

时间:2013-06-26 21:09:24

标签: android android-layout relativelayout customdialog

这是我的自定义对话框,有一些文本框和两个按钮。 我正在使用RelativeLayout。

我希望对话框大小与内容相匹配,而不是那里的所有空白区域。 我不想使用明确的像素高度(这不是好习惯)。

另一方面,有一种方法可以在每个视图之间留出一些空间吗?

enter image description here

这是我的XML

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

<TextView
    android:id="@+id/txt_desc"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="8pt"
    android:textStyle="italic" />

<TextView
    android:id="@+id/txt_date"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"         
    android:layout_marginLeft="10dp"
    android:layout_below="@+id/txt_desc"
    android:textSize="8pt" />

<TextView
    android:id="@+id/txt_place"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"         
    android:layout_marginLeft="10dp"
    android:layout_below="@+id/txt_date"
    android:textSize="8pt" />

<Button
    android:id="@+id/btn_close"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_below="@+id/txt_place"
    android:layout_toRightOf="@+id/view"
    android:text="@string/btn_close" />

<View
    android:id="@+id/view"
    android:layout_width="0dp"
    android:layout_height="1dp"
    android:layout_centerHorizontal="true" />

<Button
    android:id="@+id/btn_edit"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_below="@+id/txt_place"
    android:layout_toLeftOf="@+id/view"
    android:drawableLeft="@android:drawable/ic_menu_edit"
    android:text="@string/btn_edit" />

</RelativeLayout>

2 个答案:

答案 0 :(得分:4)

第一个问题

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">

第二个问题

如果你想将View与Top分开5 dp,请使用android:marginTop =“5dp”。 marginLeft |右|底部也可用。

<TextView
    android:id="@+id/txt_place"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"         
    android:layout_marginLeft="10dp"
    android:layout_marginTop="5dp" <-----------------
    android:layout_below="@+id/txt_date"
    android:textSize="8pt" />

顺便说一句,如果我是你,我会嵌套一些布局来制作秩序。您可以拥有一般的相对布局,然后是2个线性布局:一个水平用于TextViews,一个垂直用于按钮。您可以定义与编辑器一起玩,并尝试为对话框创建最佳外观。

修改

试试这个:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#0000"
    android:orientation="vertical"
    android:paddingBottom="50dp" >

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/txt_desc"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="prova"
                android:textSize="8pt"
                android:textStyle="italic" />

            <TextView
                android:id="@+id/txt_date"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:text="prova"
                android:textSize="8pt" />

            <TextView
                android:id="@+id/txt_place"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:text="prova"
                android:textSize="8pt" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" >

            <Button
                android:id="@+id/btn_edit"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:drawableLeft="@android:drawable/ic_menu_edit"
                android:text="btn_edit" />

            <Button
                android:id="@+id/btn_close"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="btn_close" />

            <View
                android:id="@+id/view"
                android:layout_width="0dp"
                android:layout_height="1dp" />
        </LinearLayout>
    </LinearLayout>

</LinearLayout>

我对文本进行了硬编码。主要的想法是在后台使用一个大容器布局,这是一个trasparent(background=#0000),并在包含你的Views的wrap_content中的布局顶部。

如果此解决方案无法解决您的问题,我认为您可以直接在代码中编辑高度。尝试与this question

相关联

答案 1 :(得分:0)

将相对布局的高度设置为wrap_content

例如:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">

    <!-- More XML -->

</RelativeLayout>

另请注意,fill_parent的宽度和高度已弃用。

您可以分别使用android:layout_marginandroid:padding添加边距(视图外部的额外空间)或填充(视图内的额外空间)。还有一些变体,例如layout_marginTop,仅适用于视图的特定一面。