打开对话框时禁用与后台的交互
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.
我试图做到这一点,以便在单击 "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.