Android - 将自定义对话框布局高度设置为wrap_content

时间:2017-01-13 18:10:24

标签: android android-layout

我正在使用自定义布局来显示对话框。这是布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    >
    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            >
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textSize="20sp"
                android:textStyle="bold"
                android:id="@+id/dialog_title_tv"
                android:text="Dialog Title"
                />
        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="16dp"
            >
            <android.support.design.widget.TextInputEditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Enter Phone Number"
                />
        </android.support.design.widget.TextInputLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:padding="8dp"
            >
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Select Country: "
                android:padding="8dp"
                />
            <Spinner
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:padding="8dp"
                android:id="@+id/country_spinner"
                />
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:padding="8dp"
            >
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Select City: "
                android:padding="8dp"
                />
            <Spinner
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:padding="8dp"
                android:id="@+id/city_spinner"
                />
        </LinearLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:padding="8dp"
            >
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Select Area: "
                android:padding="8dp"
                />
            <Spinner
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:padding="8dp"
                android:id="@+id/area_spinner"
                />
        </LinearLayout>
        </LinearLayout>
    </ScrollView>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="right"
        >
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Done"
            />
    </LinearLayout>
</LinearLayout> 

它显示如下:

enter image description here

但是,我想将其高度设置为WRAP_CONTENT。目前,它占据了整个屏幕。我怎样才能做到这一点?我究竟做错了什么?提前致谢

3 个答案:

答案 0 :(得分:2)

试试这个布局代码:

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1">

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

            <TextView
                android:id="@+id/dialog_title_tv"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Dialog Title"
                android:textSize="20sp"
                android:textStyle="bold" />

            <android.support.design.widget.TextInputLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:padding="16dp">

                <android.support.design.widget.TextInputEditText
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:hint="Enter Phone Number" />
            </android.support.design.widget.TextInputLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:padding="8dp">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:padding="8dp"
                    android:text="Select Country: " />

                <Spinner
                    android:id="@+id/country_spinner"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:padding="8dp" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:padding="8dp">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:padding="8dp"
                    android:text="Select City: " />

                <Spinner
                    android:id="@+id/city_spinner"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:padding="8dp" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:padding="8dp">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:padding="8dp"
                    android:text="Select Area: " />

                <Spinner
                    android:id="@+id/area_spinner"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:padding="8dp" />
            </LinearLayout>
        </LinearLayout>
    </ScrollView>

    <RelativeLayout
        android:id="@+id/AddtoCart"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom">

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:text="Done" />

    </RelativeLayout>
</LinearLayout>

答案 1 :(得分:2)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#1a000000"
    android:layout_margin="16dp"
    android:padding="16dp">
    <TextView
        android:id="@+id/dialog_header"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="20sp"
        android:text="My Dialog"
        android:fontFamily="sans-serif-condensed"
        android:textStyle="bold"/>
    <android.support.design.widget.TextInputLayout
        android:id="@+id/text_input_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/dialog_header"
        android:layout_marginTop="8dp">
        <android.support.design.widget.TextInputEditText
            android:id="@+id/text_input_edit_text"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="16sp"
            android:hint="Enter phone number"/>
    </android.support.design.widget.TextInputLayout>
    <TextView
        android:id="@+id/select_country_label"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Select Country:"
        android:layout_toStartOf="@+id/country_spinner"
        android:layout_alignBottom="@+id/country_spinner"
        android:textSize="14sp"
        android:fontFamily="sans-serif-condensed"
        android:textStyle="bold"/>
    <Spinner
        android:id="@+id/country_spinner"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:layout_below="@+id/text_input_layout"
        android:layout_alignParentEnd="true"
        android:layout_marginTop="8dp"/>
    <TextView
        android:id="@+id/select_city_label"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Select City:"
        android:layout_toStartOf="@+id/city_spinner"
        android:layout_alignBottom="@+id/city_spinner"
        android:textSize="14sp"
        android:fontFamily="sans-serif-condensed"
        android:textStyle="bold"/>
    <Spinner
        android:id="@+id/city_spinner"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:prompt="Select One"
        android:layout_below="@+id/country_spinner"
        android:layout_alignParentEnd="true"
        android:layout_marginTop="8dp"/>
    <TextView
        android:id="@+id/select_area_label"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Select Area:"
        android:layout_toStartOf="@+id/area_spinner"
        android:layout_alignBottom="@+id/area_spinner"
        android:textSize="14sp"
        android:fontFamily="sans-serif-condensed"
        android:textStyle="bold"/>
    <Spinner
        android:id="@+id/area_spinner"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:prompt="Select One"
        android:layout_below="@+id/city_spinner"
        android:layout_alignParentEnd="true"
        android:layout_marginTop="8dp"/>

    <TextView
        android:id="@+id/done"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="done"
        android:textAllCaps="true"
        android:layout_below="@+id/area_spinner"
        android:layout_alignParentEnd="true"
        android:layout_marginTop="24dp"
        android:textSize="14sp"
        android:paddingTop="16dp"
        android:paddingBottom="16dp"
        android:textColor="#00f"/>
    <TextView
        android:id="@+id/cancel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="cancel"
        android:textAllCaps="true"
        android:layout_below="@+id/area_spinner"
        android:layout_toStartOf="@+id/done"
        android:layout_marginTop="24dp"
        android:layout_marginEnd="24dp"
        android:textSize="14sp"
        android:paddingTop="16dp"
        android:paddingBottom="16dp"
        android:textColor="#00f"/>

</RelativeLayout>

只需将上述XML代码复制粘贴到自定义对话框布局中即可。

  

虽然您已经将答案标记为正确,但我发布了此信息   由于以下原因

  1. 它没有嵌套视图,这将提高代码的效率。
  2. 遵循构建对话框的Android设计指南
  3. 我觉得,在堆栈溢出中,提供最佳解决方案而不是纠正现有解决方案中的错误更为重要。
  4.   

    P.S:这是对话框的非滚动视图版本。自从   内容较少。如果您还需要可滚动版本,请评论。它   会有一些略有不同的实施方式   产量略有不同。

答案 2 :(得分:0)

您可能想尝试这些:

  • android:layout_weight="1"
  • 中设置ScrollView
  • android:layout_height设置为某个静态高度(以dp为单位)。
  • 将父级从LinearLayout更改为RelativeLayout