【发布时间】: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