对话框打开时禁用与背景的交互

时间:2019-10-22 12:28:08

标签: android android-layout android-fragments kotlin android-alertdialog

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

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

并在用户选择取消或保留票证后允许进行交互:

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

这似乎都不起作用。

还有没有办法使“警告对话框”的宽度变小?我试图在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>

1 个答案:

答案 0 :(得分:2)

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

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

设置对话框是否可取消。默认值为true。

该对话框将在用户操作时关闭。

要调整对话框的宽度和高度,请执行以下操作:

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

setLayout():

  

设置窗口的宽度和高度布局参数。这两个的默认值都是MATCH_PARENT;您可以将它们更改为WRAP_CONTENT或绝对值,以使窗口不全屏显示。

相关问题