【问题标题】:Custom Dialog Alert自定义对话框警报
【发布时间】:2020-01-21 09:33:29
【问题描述】:

我正在尝试制作如图所示的自定义对话框警报;我试着到处寻找让它看起来像照片,但似乎没有任何效果。任何帮助,将不胜感激;第一张图是我想做的,第二张是现在的样子:

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val alert = AlertDialog.Builder(this@MainActivity)

        alert.setTitle("Confirm delete")
        alert.setMessage("Lorem ipsum dolor sit amet, consectetuer adipiscing elit.")

        alert.setPositiveButton("DELETE"){dialog, which ->
            Toast.makeText(applicationContext,"Ok, we change the app background.",Toast.LENGTH_SHORT).show()

        }

            alert.setNegativeButton("CANCEL"){dialog,which ->
            Toast.makeText(applicationContext,"You are not agree.",Toast.LENGTH_SHORT).show()
        }

        val dialog: AlertDialog = alert.create()

        dialog.show()
    }
}

【问题讨论】:

  • 还分享您使用您提供的代码获得的结果
  • 您可以尝试在任何视图的单击上显示对话框吗?
  • @KaranMehta 请查看更新
  • @Niceumang 请查看更新
  • 您想要实现的结果是旧主题自定义警报,但您的项目主题可能是材料主题,这就是对话框样式不同的原因,否则对话框相同

标签: android android-studio kotlin android-alertdialog


【解决方案1】:

Alert.Dialog 主题取决于您的设备 API 级别。第一张图片看起来像 Android KitKat (API 19 - 20),第二张图片遵循 ma​​terial design pattern (API >20)。

如果想像第一张图片一样对话,您可能需要自定义布局

快乐编码

【讨论】:

  • 感谢您的帮助!
【解决方案2】:

1.为Dialog创建Kotlin类

class CustomDialog(
    context: Context,val mCallBack: CallBack
) : Dialog(context, R.style.full_screen_dialog) {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.dialog_custom)
        // YOUR COMPONENT HANDLE HERE
    // FOR EXAMPLE
        btn_yes.setOnClickListener {
              mCallBack.onDone()
              dismiss()
        }
        btn_cancel.setOnClickListener {
            dismiss()
        }
    }


    interface CallBack {
        //YOU CAN HANDLE THIS METHOD IN YOUR CALLING ACTIVITY
        fun onDone(rating: Float, comments: String)
    }

}

2.如何调用

 var mDialog: CustomDialog = CustomDialog(
            this,
            object : CustomDialog.CallBack {
                override fun onDone() {

                }
            })
        mDialog.show()

3.styles.xml

<style name="full_screen_dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowIsFloating">false</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
        <item name="android:background">@android:color/transparent</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="colorAccent">@color/transparent</item>
    </style>

创建您自己的自定义布局文件并将其设置为setContentView(R.layout.dialog_custom),因为我在这里没有提到

【讨论】:

  • 感谢您的帮助!
【解决方案3】:

这是因为您的对话框使用材质主题显示。 您可以使用以下代码通过将样式应用于 AlertDialog 来获得所需的结果。

val alert = AlertDialog.Builder(this@MainActivity,AlertDialog.THEME_HOLO_LIGHT)

注意:此样式已弃用。

【讨论】:

  • 感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-13
  • 1970-01-01
  • 2023-03-13
  • 2011-06-17
相关资源
最近更新 更多