扩展AlertDialog会在对话框底部创建大填充

时间:2018-05-21 14:32:09

标签: android android-alertdialog

我正在尝试创建一个使用自定义视图的对话框,该视图也附加了许多不同的行为,这就是我扩展AlertDialog而不是使用构建器的原因。

创建视图的代码看起来像这样

class MyTaskCreateDialog extends AlertDialog implements DialogInterface.OnCancelListener {

    public MyTaskCreateDialog(Context ctx, TaskItem item, List<Person> people, IOnFinishListener listener) {
        super(ctx) {
        View view = LayoutInflater.from(ctx).inflate(Resource.Layout.dialog_my_task_create, null, false);
        setView(view);
        setCancelable(true);
        setOnCancelListener(this);
        setCanceledOnTouchOutside(true);
        assign_views(view); //this assigns the views to the local variables
        attach_listeners(); 
        refresh_view();//this updates the view with data
    }

以上使用此布局文件

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="@dimen/app_padding">

    <android.support.design.widget.TextInputLayout
        android:id="@+id/my_task_create_title"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/app_margin"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <android.support.design.widget.TextInputEditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/my_task_create_hint_title" />
    </android.support.design.widget.TextInputLayout>

    <android.support.design.widget.TextInputLayout
        android:id="@+id/my_task_create_description"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        app:layout_constraintEnd_toEndOf="@+id/my_task_create_title"
        app:layout_constraintStart_toStartOf="@+id/my_task_create_title"
        app:layout_constraintTop_toBottomOf="@+id/my_task_create_title">

        <android.support.design.widget.TextInputEditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/my_task_create_hint_description" />
    </android.support.design.widget.TextInputLayout>

    <TextView
        android:id="@+id/my_task_create_assignee_caption"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/my_task_create_caption_assignee"
        app:layout_constraintBottom_toBottomOf="@+id/my_task_create_assignee"
        app:layout_constraintStart_toStartOf="@+id/my_task_create_description"
        app:layout_constraintTop_toTopOf="@+id/my_task_create_assignee" />

    <Spinner
        android:id="@+id/my_task_create_assignee"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="@dimen/app_margin"
        android:checked="true"
        android:padding="@dimen/app_padding"
        android:textOff="@string/my_task_create_toggle_manually"
        android:textOn="@string/my_task_create_toggle_automatically"
        app:layout_constraintEnd_toEndOf="@+id/my_task_create_description"
        app:layout_constraintStart_toEndOf="@+id/my_task_create_assignee_caption"
        app:layout_constraintTop_toBottomOf="@+id/my_task_create_description"
        tools:listitem="@android:layout/simple_spinner_item" />


    <Button
        android:id="@+id/my_task_create_create_task"
        style="@style/Widget.AppCompat.Button.Borderless.Colored"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginBottom="@dimen/app_margin"
        android:text="@string/my_task_create_button_create"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/my_task_create_cancel"
        app:layout_constraintTop_toBottomOf="@+id/my_task_create_assignee" />

    <Button
        android:id="@+id/my_task_create_cancel"
        style="@style/Widget.AppCompat.Button.Borderless.Colored"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginBottom="@dimen/app_margin"
        android:text="@string/my_task_create_button_cancel"
        app:layout_constraintEnd_toStartOf="@+id/my_task_create_create_task"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/my_task_create_assignee" />

</android.support.constraint.ConstraintLayout>

创建一个底部有大填充的对话框。

实际上是我将ConstraintLayout的背景更改为灰色,然后对话框的下半部分似乎是默认颜色。

以上结果如下:

the dialog that is shown

现在我知道为按钮保存了一些空间(我不使用那些,我使用布局文件中的自定义空间),但是如何让剩下的空间消失并使我的对话框包装其内容?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,唯一有效的解决方案是将以下代码添加到View内的所有ConstraintLayout中:

android:layout_height="0dp"
app:layout_constraintHeight_default="wrap"

这些句子替换为:

android:layout_height="wrap_content"