Kotlin 사용자 정의 Dialog

22139 단어

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, 끝났습니다. 뭐라고 써야 할지 몰라서 코드를 아무렇게나 붙일 수밖에 없습니다.

좋은 웹페이지 즐겨찾기