打开对话框时禁用与后台的交互

Disable Interaction with Background When Dialog Is Opened

我试图做到这一点,以便在单击 "delete" 按钮并弹出警报对话框时,用户将无法与后台的所有内容进行交互。我试图通过设置禁用交互:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE)

并在用户选择取消或保留票后允许互动:

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE)

None 这似乎有效。

另外,请问有没有办法让Alert Dialog的宽度变小?我试图在 login_dialog.xml 中减少它,但似乎没有任何效果。

MainActivity.kt

    import android.app.AlertDialog
    import android.content.Intent
    import android.graphics.Color
    import android.net.Uri
    import android.os.Bundle
    import android.support.v7.app.AppCompatActivity
    import android.view.Gravity
    import android.view.LayoutInflater
    import android.view.WindowManager
    import android.view.animation.AnimationUtils
    import android.widget.TextView
    import kotlinx.android.synthetic.main.activity_main.*
    import kotlinx.android.synthetic.main.login_dialog.view.*


    class MainActivity : AppCompatActivity() {

        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)

    //button click to show dialog
            btn_align_delete.setOnClickListener {

            getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
            WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);

                val Customtitle = TextView(this)

                Customtitle.setText("WARNING")
                Customtitle.setBackgroundColor(Color.WHITE)
                Customtitle.setPadding(10, 30, 10, 0)
                Customtitle.setGravity(Gravity.CENTER)
                Customtitle.setTextColor(Color.BLACK)
                Customtitle.setTextSize(18F)

                //Inflate the dialog with custom view
                val mDialogView = LayoutInflater.from(this).inflate(R.layout.login_dialog, null)
                //AlertDialogBuilder
                val mBuilder = AlertDialog.Builder(this)
                    .setView(mDialogView)
                    .setCustomTitle(Customtitle)

                //show dialog
                val  mAlertDialog = mBuilder.show()
                //login button click of custom layout
                mDialogView.keepTicketBtn.setOnClickListener {
                    //dismiss dialog
                getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);

                    mAlertDialog.dismiss()
                    //get text from EditTexts of custom layout

                    val password = mDialogView.dialogPasswEt.text.toString()

                }
                //cancel button click of custom layout
                mDialogView.dialogCancelBtn.setOnClickListener {
                    //dismiss dialog
                getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);

                    mAlertDialog.dismiss()
                }
            }

        }
    }

main_activity.xml

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

    <Button
            android:id="@+id/btn_align_delete"
            style="@style/Widget.AppCompat.Button.Borderless"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_alignParentEnd="true"
            android:drawableEnd="@drawable/ticketdelete"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.0" />



</android.support.constraint.ConstraintLayout>

login_dialog.xml

 <?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="match_parent"
            android:orientation="vertical"
            android:gravity="center"
            android:background="@drawable/alert_dialog"
            android:padding="10dp">

        <TextView
                android:id="@+id/dialogPasswEt"
                android:layout_marginTop="0dp"
                android:layout_width="230dp"
                android:layout_marginStart="60dp"
                android:layout_marginEnd="60dp"
                android:textColor="@color/colorBorder"
                android:layout_height="wrap_content"
                android:fontFamily="@font/mlight"
                android:gravity="center_horizontal"
                android:text="You will no longer be able to add time to your stay."
                android:textSize="12sp" />

        <TextView
                android:id="@+id/dialogPasswE2t"
                android:layout_width="210dp"
                android:layout_marginStart="60dp"
                android:layout_marginEnd="60dp"
                android:textColor="@color/colorBorder"
                android:layout_height="wrap_content"
                android:fontFamily="@font/mlight"
                android:layout_marginTop="15dp"
                android:text="This action CANNOT BE UNDONE."
                android:textSize="12sp" />

        <LinearLayout
                android:layout_width="250dp"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:layout_marginTop="15dp"
                android:gravity="center">

            <Button

                    android:id="@+id/keepTicketBtn"
                    android:layout_width="125dp"
                    android:layout_height="wrap_content"
                    android:color="@color/colorBorder"
                    android:background="@drawable/btn_align"
                    android:text="Keep Ticket"

                    android:textColor="@color/blueOrigin" />

            <Button
                    android:id="@+id/dialogCancelBtn"
                    android:layout_width="125dp"
                    android:color="@color/colorBorder"
                    android:layout_height="wrap_content"
                    android:background="@drawable/btn_align"
                    android:text="DELETE"
                    android:textColor="@color/error_color_material_light" />


        </LinearLayout>

    </LinearLayout>

我想你想防止关闭对话框,在这种情况下,你需要做的就是按以下方式设置它:

val mBuilder = AlertDialog.Builder(this)
                .setView(mDialogView)
                .setCancelable(false) //This
                .setCustomTitle(Customtitle)

Sets whether the dialog is cancelable or not. The default is true.

对话框将根据用户操作关闭。

调整对话框的宽度和高度:

mBuilder.show().window?.setLayout(width, height)

setLayout():

Set the width and height layout parameters of the window. The default for both of these is MATCH_PARENT; you can change them to WRAP_CONTENT or an absolute value to make a window that is not full-screen.