【问题标题】:Disable Interaction with Background When Dialog Is Opened打开对话框时禁用与背景的交互
【发布时间】:2019-10-22 12:28:08
【问题描述】:

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

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>

【问题讨论】:

  • “与背景的交互”是什么意思?我猜当你在外面点击时你的对话框正在关闭,对吧?
  • 正确,当我点击它外面时对话框正在关闭 - 我试图阻止它在外面点击时关闭。
  • 只需在 Dialog.Builder 上使用 setCancelable(false)
  • 不错!这工作谢谢!您是否碰巧知道减小警报对话框宽度的方法?

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


【解决方案1】:

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

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

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

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

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

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

setLayout():

设置窗口的宽高布局参数。两者的默认值是 MATCH_PARENT;您可以将它们更改为 WRAP_CONTENT 或绝对值以制作非全屏窗口。

【讨论】:

  • 不错!效果很好-抱歉,您是否碰巧知道减小警报对话框宽度大小的方法?我试图减小它,但它根本没有减小宽度。
猜你喜欢
  • 2020-02-15
  • 2023-02-16
  • 1970-01-01
  • 1970-01-01
  • 2023-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-14
相关资源
最近更新 更多