自定义对话框不显示,只是褪色的黑色背景

Custom dialog not showing, just faded black background

好的,我一直在尝试为自定义对话框编写一个单独的 class,这里是代码

class CustomDialog {
    companion object {
        fun create(context: Context, content: String) {
            context as Activity
            val inflater = context.layoutInflater
            val view = inflater.inflate(R.layout.dialog_info, null)
            val infoDialog = AlertDialog.Builder(context).create()
            view.dialog_content.text = content
            view.dialog_okButton.setOnClickListener {
                println("CLICKED")
                infoDialog.dismiss()
            }
            infoDialog.setContentView(view)

            infoDialog.show()
        }
    }
}

我正在充气的布局是这样的

<?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="wrap_content"
    android:layout_marginStart="10dp"
    android:layout_marginEnd="10dp"
    android:background="@drawable/dialog_background"
    android:orientation="vertical"
    android:gravity="center"
    android:padding="20dp">

    <TextView
        android:id="@+id/dialog_content"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:fontFamily="@font/iranyekanregular"
        android:text="Some text"
        android:textColor="@color/white" />

    <View
        android:layout_width="match_parent"
        android:layout_height="1px"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="10dp"
        android:layout_marginRight="20dp"
        android:layout_marginBottom="10dp"
        android:background="@color/white" />

    <Button
        android:id="@+id/dialog_okButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:fontFamily="@font/iranyekanregular"
        android:gravity="center"
        android:clickable="true"
        android:focusable="true"
        android:text="OK" />
</LinearLayout>

一个简单的文本视图,一个分隔线和一个关闭对话框的按钮。

但每当我触发按钮显示对话框时,它只会显示褪色的黑屏,而不是对话框本身。 如果我使用 setView(view) 而不是 setContentView 它几乎可以显示它自己但是因为它只是默认对话框的中间(内容)部分我看到默认对话框的背景并且仍然是关闭按钮不会工作。任何帮助都感激不尽。顺便说一句,我已经搜索了很多但没有运气。

问题的产生是因为您没有给它任何样式。

Use  infoDialog.setView(view)

并在创建对话框时提供 material 主题样式

val infoDialog = AlertDialog.Builder(ContextThemeWrapper(context,android.R.style.ThemeOverlay_Material_Dialog)).create()

最后

infoDialog.window.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
infoDialog.show()

您的其余代码没问题。

您忘记将放大视图添加到对话框中。

class CustomDialog {
companion object {
    fun create(context: Context, content: String) {
        context as Activity
        val inflater = context.layoutInflater
        val view = inflater.inflate(R.layout.dialog_info, null)
        val infoDialogBuilder = AlertDialog.Builder(context)
        infoDialogBuilder.setView(view)
        val infoDialog = infoDialogBuilder.create()
        view.dialog_content.text = content
        view.dialog_okButton.setOnClickListener {
            println("CLICKED")
            infoDialog.dismiss()
        }
        infoDialog.setContentView(view)

        infoDialog.show()
    }
}

那是缺少的行:

infoDialogBuilder.setView(view)