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, 끝났습니다. 뭐라고 써야 할지 몰라서 코드를 아무렇게나 붙일 수밖에 없습니다.
,
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.