本文实例为大家分享了kotlin自定义对话框的具体代码,供大家参考,具体内容如下
1.CommonDialog 创建我们自己的对话框,继承于系统的Dialog 实现构造方法
classCommonDialog(context:Context?,themeResId:Int):Dialog(context,themeResId){}\2. 在内部创建BUilder类 定义出我们需要的方法和属性
classBuilder(privateval context:Context){privatevartitle:String?=nullprivatevarmessage:String?=nullprivatevarpositiveButtonContent:String?=nullprivatevarnegativeButtonContent:String?=nullprivatevarpositiveButtonListener:DialogInterface.OnClickListener?=nullprivatevarnegativeButtonListener:DialogInterface.OnClickListener?=nullprivatevarcontentView:View?=nullprivatevarimageid:Int=0privatevarcolor:Int=0privatevarwithOffSize:Float=0.toFloat()privatevarheightOffSize:Float=0.toFloat()funsetTitle(title:String):Builder{this.title=titlereturnthis}funsetTitle(title:Int):Builder{this.title=context.getText(title)asStringreturnthis}funsetMessage(message:String):Builder{this.message=messagereturnthis}funsetMessageColor(color:Int):Builder{this.color=colorreturnthis}funsetImageHeader(Imageid:Int):Builder{this.imageid=Imageidreturnthis}funsetPositiveButton(text:String,listener:DialogInterface.OnClickListener):Builder{this.positiveButtonContent=textthis.positiveButtonListener=listenerreturnthis}funsetPositiveButton(textId:Int,listener:DialogInterface.OnClickListener):Builder{this.positiveButtonContent=context.getText(textId)asStringthis.positiveButtonListener=listenerreturnthis}funsetNegativeButton(text:String,listener:DialogInterface.OnClickListener):Builder{this.negativeButtonContent=textthis.negativeButtonListener=listenerreturnthis}funsetNegativeButton(textId:Int,listener:DialogInterface.OnClickListener):Builder{this.negativeButtonContent=context.getText(textId)asStringthis.negativeButtonListener=listenerreturnthis}funsetContentView(v:View):Builder{this.contentView=vreturnthis}funsetWith(v:Float):Builder{this.withOffSize=vreturnthis}funsetContentView(v:Float):Builder{this.heightOffSize=vreturnthis}funcreate():CommonDialog{/** * 利用我们刚才自定义的样式初始化Dialog */val dialog=CommonDialog(context,R.style.dialogStyle)/** * 下面就初始化Dialog的布局页面 */val inflater=context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)asLayoutInflater val dialogLayoutView=inflater.inflate(R.layout.dialog_layout,null)dialog.addContentView(dialogLayoutView,ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT))if(imageid!=0){(dialogLayoutView.findViewById<View(R.id.iv_image_header)asImageView).setImageResource(imageid)}else{(dialogLayoutView.findViewById<View(R.id.iv_image_header)asImageView).visibility=View.GONE}if(!TextUtils.isEmpty(title)){(dialogLayoutView.findViewById<View(R.id.tv_dialog_title)asTextView).text=title}else{// Log.w(context.getClass().toString(), "未设置对话框标题!");}if(color!=0){val viewById=dialogLayoutView.findViewById<View(R.id.dialog_content)asTextView viewById.setTextColor(color)}if(!TextUtils.isEmpty(message)){(dialogLayoutView.findViewById<View(R.id.dialog_content)asTextView).text=message}elseif(contentView!=null){(dialogLayoutView.findViewById<View(R.id.dialog_llyout_content)asLinearLayout).removeAllViews()(dialogLayoutView.findViewById<View(R.id.dialog_llyout_content)asLinearLayout).addView(contentView,ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT))}else{(dialogLayoutView.findViewById<View(R.id.dialog_content)asTextView).visibility=View.INVISIBLE}if(!TextUtils.isEmpty(positiveButtonContent)){(dialogLayoutView.findViewById<View(R.id.tv_dialog_pos)asTextView).text=positiveButtonContentif(positiveButtonListener!=null){(dialog.findViewById<View(R.id.tv_dialog_pos)asTextView).setOnClickListener{positiveButtonListener!!.onClick(dialog,-1)}}}else{(dialogLayoutView.findViewById<View(R.id.tv_dialog_pos)asTextView).visibility=View.GONEdialogLayoutView.findViewById<View(R.id.line).visibility=View.GONE}if(!TextUtils.isEmpty(negativeButtonContent)){(dialogLayoutView.findViewById<View(R.id.tv_dialog_neg)asTextView).text=negativeButtonContentif(negativeButtonListener!=null){(dialogLayoutView.findViewById<View(R.id.tv_dialog_neg)asTextView).setOnClickListener{negativeButtonListener!!.onClick(dialog,-2)}}}else{(dialogLayoutView.findViewById<View(R.id.tv_dialog_neg)asTextView).visibility=View.GONE}/** * 将初始化完整的布局添加到dialog中 */dialog.setContentView(dialogLayoutView)/** * 禁止点击Dialog以外的区域时Dialog消失 */dialog.setCanceledOnTouchOutside(false)val window=dialog.window val context=this.contextasActivity val windowManager=context.windowManager val defaultDisplay=windowManager.defaultDisplay val attributes=window!!.attributesif(withOffSize.toDouble()!=0.0){attributes.width=(defaultDisplay.width*withOffSize).toInt()}else{attributes.width=(defaultDisplay.width*0.77).toInt()}if(heightOffSize.toDouble()!=0.0){attributes.height=(defaultDisplay.height*heightOffSize).toInt()}window.attributes=attributesreturndialog}}3.在需要的地方使用
CommonDialog.Builder(this).setImageHeader(R.mipmap.icon_gantan_tankuang).setTitle("你是否要注销账户").setMessage("注销后需重新注册才能使用牛返返优惠").setPositiveButton("确定注销",DialogInterface.OnClickListener{p0,p1-p0?.dismiss()DestroyAccount()}).setNegativeButton("取消",DialogInterface.OnClickListener{p0,p1-p0?.dismiss()}).setWith(0.77f).create().show()实现效果:
以上就是本文的全部内容,希望对大家的学习有所帮助。
更多Android进阶指南 可以扫码 解锁《Android十大板块文档》
1.Android车载应用开发系统学习指南(附项目实战)
2.Android Framework学习指南,助力成为系统级开发高手
3.2024最新Android中高级面试题汇总+解析,告别零offer
4.企业级Android音视频开发学习路线+项目实战(附源码)
5.Android Jetpack从入门到精通,构建高质量UI界面
6.Flutter技术解析与实战,跨平台首要之选
7.Kotlin从入门到实战,全方面提升架构基础
8.高级Android插件化与组件化(含实战教程和源码)
9.Android 性能优化实战+360°全方面性能调优
10.Android零基础入门到精通,高手进阶之路
敲代码不易,关注一下吧。ღ( ´・ᴗ・` ) 🤔