Kotlin自定义Dialog

Kotlin自定义Dialog

        刚学kotlin,上班空闲之余写一个自定义dialog的例子吧。大佬们勿喷,抱拳了老铁!!

1,新建一个.kt 类继承Dialog,然后写一个布局,声明一下布局内对应的控件。

    class SafeCenterDialog : Dialog {
    var tvTitle: TextView? = null
    var ivDialogIcon: ImageView? = null
    var tvDialogContent: TextView? = null
    var btDialogConfirm: TextView? = null //确定按钮可通过外部自定义按钮内容
    var tvDialogCancel: TextView? = null //取消
    var tvphoneInput: EditText? = null//输入手机验证码
    var tvphonecode: TextView? = null//发送手机验证码
...

2,新建一个constructor构造函数,传入两个参数context,自定义的Layout布局。在这个函数里绑定控件.

 constructor(context: Context, themeStyle: Int) : super(context, themeStyle) {
        initView()
    }

    private fun initView() {
        setContentView(R.layout.dialog_safecenter)
        setCanceledOnTouchOutside(false)
        tvTitle = findViewById(R.id.tv_dialog_title)
        bindcard_isvoice = findViewById(R.id.bindcard_isvoice)
        tv_get_very_bindcard_isvoice = findViewById(R.id.tv_get_very_bindcard_isvoice)
        btDialogConfirm = findViewById(R.id.safe_sumbit)
        tvDialogCancel = findViewById(R.id.close_dialog)
        tvphoneInput = findViewById(R.id.center_input_code)
...
    }

3,新建Builder类,传入调用页面this。

 class Builder(val context: Context) {
        var confirmListener: OnConfirmListener? = null
        var cancelListener: OnCancelListener? = null
        var title: String? = null
        var icon: Int? = 0
        var content: String? = null
        var btConfirmText: String? = null
...
        fun setOnCancelListener(cancelListener: OnCancelListener): Builder {
            this.cancelListener = cancelListener
            return this
        }
        fun setTitle(title: String): Builder {
            this.title = title
            return this
        }
        fun setIcon(icon: Int): Builder {
            this.icon = icon
            return this
        }
        // 点击确定按钮的文字
        fun setConfirmText(btConfirmText: String): Builder {
            this.btConfirmText = btConfirmText
            return this
        }
        //在下面方法内做弹窗页面的操作
         fun create(): SafeCenterDialog {
            val dialog = SafeCenterDialog(context, R.style.custom_dialog2)
            dialog.window.setGravity(Gravity.BOTTOM)
            //获得window窗口的属性
            val lp = dialog.window.attributes
            //设置窗口宽度为充满全屏
            dialog.dialog_phone?.text = phonetext
            lp.width = WindowManager.LayoutParams.MATCH_PARENT
           ...
           //控件与onclick绑定
            if (cancelListener != null) {
                dialog.tvDialogCancel?.setOnClickListener { v -> cancelListener!!.onClick(dialog) }
            }
            if (confirmListener != null) {
                dialog.btDialogConfirm?.setOnClickListener { v -> confirmListener!!.onClick(dialog) }
            }

4,建立相应接口给弹窗主页面调用。

    // 点击弹窗取消按钮回调
    interface OnCancelListener {
        fun onClick(dialog: Dialog)
    }

    // 点击弹窗跳转回调
    interface OnConfirmListener {
        fun onClick(dialog: Dialog)
    }

    //发送手机验证码
    interface OnPhoneCodeListener {
        fun onClick(dialog: Dialog)
    }在这里插入代码片

5,页面使用,使用onclick方法内dialog参数对弹窗进行操作。

 SafeCenterDialog.Builder(this)
            .setGatext("0")
            .setPhonetext(PreferenceUtils.getUserName())
            .setOnPhoneCodeListener(object : SafeCenterDialog.OnPhoneCodeListener {
                override fun onClick(dialog: Dialog) {
                    verifyCode(
                        dialog.phone_code,
                        dialog.tv_get_very_bindcard_isvoice,
                        dialog.bindcard_isvoice
                    )
                    mViewModel.getVeryCode(PreferenceUtils.getMOBILE(), 0)
//                    dialog()
                }
            })
            .setType(DialogType.BIND_CARD)
            .setOnCancelListener(object : SafeCenterDialog.OnCancelListener {
                override fun onClick(dialog: Dialog) {
                    dialog.dismiss()
                }
            })
            .setOnConfirmListener(object : SafeCenterDialog.OnConfirmListener {
                override fun onClick(dialog: Dialog) {
                    mViewModel.bindWechatInfo(
                        dialog.center_mima_code.text.toString(),
                        dialog.center_input_code.text.toString(),
                        et_wechat_num.text.toString(), tempFile!!
                    )
                }

            })
            .setOnTvIsvoice(object : SafeCenterDialog.OnTvIsvoiceListener {
                override fun onClick(dialog: Dialog) {
                    dialog()
                }
            })
            .create()
            .show()

6,结束了,不知道写点儿啥,只能胡乱贴点代码。

 打扰了,告辞
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Kotlin 中,你可以通过自定义 Dialog 类来创建自定义对话框。 首先,创建一个继承自 Dialog 类的自定义对话框类。在该类中,你可以指定对话框的布局和行为。 下面是一个示例: ```kotlin import android.app.Dialog import android.content.Context import android.os.Bundle import android.view.Window import kotlinx.android.synthetic.main.your_dialog_layout.* class YourCustomDialog(context: Context) : Dialog(context) { private var positiveClickListener: (() -> Unit)? = null private var negativeClickListener: (() -> Unit)? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) requestWindowFeature(Window.FEATURE_NO_TITLE) setContentView(R.layout.your_dialog_layout) // 设置对话框的标题、内容等 titleTextView.text = "标题" messageTextView.text = "内容" // 设置按钮的点击事件 positiveButton.setOnClickListener { positiveClickListener?.invoke() dismiss() } negativeButton.setOnClickListener { negativeClickListener?.invoke() dismiss() } } fun setPositiveClickListener(listener: () -> Unit) { positiveClickListener = listener } fun setNegativeClickListener(listener: () -> Unit) { negativeClickListener = listener } } ``` 在上面的示例中,我们在 onCreate() 方法中设置了对话框的标题和内容,并为按钮设置了点击事件。 接下来,在你的 Activity 中使用自定义对话框。在合适的地方,创建自定义对话框的实例,并设置按钮的点击事件。 ```kotlin val dialog = YourCustomDialog(this) dialog.setPositiveClickListener { // 处理“确认”按钮的点击事件 } dialog.setNegativeClickListener { // 处理“取消”按钮的点击事件 } dialog.show() ``` 在上面的代码中,我们创建了自定义对话框的实例,并为“确认”和“取消”按钮设置了点击事件处理逻辑。最后,调用 `show()` 方法显示对话框。 记得将 `your_dialog_layout` 替换为你自定义对话框的布局文件名。 这样,你就可以在 Kotlin 中创建自定义对话框了。你可以根据自己的需求定制对话框的布局和行为。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旧人颜Q

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值