Android - 使对话框的背景部分可用

Android - Make the background part of the Dialog available

我正在创建一个 AlertDialog,如下所示。

但是,有一个问题。无法单击对话框背景。当对话框保留在屏幕上时,如何使背景可用?另外,我不想在用户使用后台时关闭对话框。

TestBannerDialog.kt

import android.app.AlertDialog
import android.app.Dialog
import android.content.Context
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.os.Bundle
import android.os.CountDownTimer
import android.view.Gravity
import android.view.View
import android.view.WindowManager

class TestBannerDialog(context: Context) : Dialog(context, false, null) {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.test_banner_dialog)
        setCanceledOnTouchOutside(false)

        window?.let {
            it.attributes.gravity = Gravity.BOTTOM
            it.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
        }
       
    }
}

test_banner_dialog.xml

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="wrap_content"
    android:layout_height="80dp"
    android:layout_gravity="center_horizontal"
    android:layout_marginBottom="24dp">

    <ImageView ....... />

    <TextView ....... />

</androidx.constraintlayout.widget.ConstraintLayout>

这样您就可以使用一些东西,然后将它添加到您希望它出现的屏幕布局中。

class TestBannerView @JvmOverloads constructor(context: Context,
                                                          attrs: AttributeSet? = null,
                                                          defStyle: Int = 0,
                                                          defStyleRes: Int = 0) : FrameLayout(context, attrs, defStyle, defStyleRes) {
init {
    LayoutInflater.from(context).inflate(R.layout.test_banner_view, this, true)
     }
}

我认为最好使用另一个视图并将其隐藏并显示而不是使用对话框,但是如果您希望对话框在单击时不关闭,请使用此代码

dialog.setCanceledOnTouchOutside(假);