亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

kotlin使用建造者模式自定義對話框

2024-07-21 23:03:48
字體:
來源:轉載
供稿:網友

本文實例為大家分享了kotlin自定義對話框的具體代碼,供大家參考,具體內容如下

1.CommonDialog 創建我們自己的對話框,繼承于系統的Dialog 實現構造方法

class CommonDialog(context: Context?, themeResId: Int) : Dialog(context, themeResId) {}

2. 在內部創建BUilder類 定義出我們需要的方法和屬性

class Builder (private val context: Context) {    private var title: String? = null    private var message: String? = null    private var positiveButtonContent: String? = null    private var negativeButtonContent: String? = null    private var positiveButtonListener: DialogInterface.OnClickListener? = null    private var negativeButtonListener: DialogInterface.OnClickListener? = null    private var contentView: View? = null    private var imageid: Int = 0    private var color: Int = 0    private var withOffSize: Float = 0.toFloat()    private var heightOffSize: Float = 0.toFloat()      fun setTitle(title: String): Builder {      this.title = title      return this    }      fun setTitle(title: Int): Builder {      this.title = context.getText(title) as String      return this    }     fun setMessage(message: String): Builder {      this.message = message      return this    }     fun setMessageColor(color: Int): Builder {      this.color = color      return this    }     fun setImageHeader(Imageid: Int): Builder {       this.imageid = Imageid      return this    }      fun setPositiveButton(text: String, listener: DialogInterface.OnClickListener): Builder {      this.positiveButtonContent = text      this.positiveButtonListener = listener      return this    }     fun setPositiveButton(textId: Int, listener: DialogInterface.OnClickListener): Builder {      this.positiveButtonContent = context.getText(textId) as String      this.positiveButtonListener = listener      return this    }     fun setNegativeButton(text: String, listener: DialogInterface.OnClickListener): Builder {      this.negativeButtonContent = text      this.negativeButtonListener = listener      return this    }     fun setNegativeButton(textId: Int, listener: DialogInterface.OnClickListener): Builder {      this.negativeButtonContent = context.getText(textId) as String      this.negativeButtonListener = listener      return this    }     fun setContentView(v: View): Builder {      this.contentView = v      return this    }     fun setWith(v: Float): Builder {      this.withOffSize = v      return this    }     fun setContentView(v: Float): Builder {      this.heightOffSize = v      return this    }     fun create(): CommonDialog {      /**       * 利用我們剛才自定義的樣式初始化Dialog       */      val dialog = CommonDialog(context,          R.style.dialogStyle)      /**       * 下面就初始化Dialog的布局頁面       */      val inflater = context          .getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater      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) as ImageView)            .setImageResource(imageid)      } else {        (dialogLayoutView.findViewById<View>(R.id.iv_image_header) as ImageView).visibility = View.GONE      }       if (!TextUtils.isEmpty(title)) {        (dialogLayoutView.findViewById<View>(R.id.tv_dialog_title) as TextView).text = title      } else {        // Log.w(context.getClass().toString(), "未設置對話框標題!");      }       if (color != 0) {        val viewById = dialogLayoutView.findViewById<View>(R.id.dialog_content) as TextView        viewById.setTextColor(color)      }       if (!TextUtils.isEmpty(message)) {        (dialogLayoutView.findViewById<View>(R.id.dialog_content) as TextView).text = message      } else if (contentView != null) {        (dialogLayoutView            .findViewById<View>(R.id.dialog_llyout_content) as LinearLayout)            .removeAllViews()        (dialogLayoutView            .findViewById<View>(R.id.dialog_llyout_content) as LinearLayout).addView(            contentView, ViewGroup.LayoutParams(            ViewGroup.LayoutParams.WRAP_CONTENT,            ViewGroup.LayoutParams.WRAP_CONTENT))      } else {        (dialogLayoutView.findViewById<View>(R.id.dialog_content) as TextView).visibility = View.INVISIBLE      }       if (!TextUtils.isEmpty(positiveButtonContent)) {        (dialogLayoutView.findViewById<View>(R.id.tv_dialog_pos) as TextView).text = positiveButtonContent        if (positiveButtonListener != null) {          (dialog.findViewById<View>(R.id.tv_dialog_pos) as TextView)              .setOnClickListener { positiveButtonListener!!.onClick(dialog, -1) }         }      } else {        (dialogLayoutView.findViewById<View>(R.id.tv_dialog_pos) as TextView).visibility = View.GONE        dialogLayoutView.findViewById<View>(R.id.line).visibility = View.GONE      }       if (!TextUtils.isEmpty(negativeButtonContent)) {        (dialogLayoutView.findViewById<View>(R.id.tv_dialog_neg) as TextView).text = negativeButtonContent        if (negativeButtonListener != null) {          (dialogLayoutView              .findViewById<View>(R.id.tv_dialog_neg) as TextView)              .setOnClickListener { negativeButtonListener!!.onClick(dialog, -2) }        }      } else {        (dialogLayoutView.findViewById<View>(R.id.tv_dialog_neg) as TextView).visibility = View.GONE      }      /**       * 將初始化完整的布局添加到dialog中       */      dialog.setContentView(dialogLayoutView)      /**       * 禁止點擊Dialog以外的區域時Dialog消失       */      dialog.setCanceledOnTouchOutside(false)        val window = dialog.window      val context = this.context as Activity      val windowManager = context.windowManager       val defaultDisplay = windowManager.defaultDisplay       val attributes = window!!.attributes       if (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 = attributes      return dialog    }  }

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()

實現效果:

kotlin,建造者模式,對話框

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到kotlin教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲第一中文字幕在线观看| 中文字幕av一区二区三区谷原希美| 亚洲色在线视频| 亚洲欧美中文另类| 久久亚洲国产成人| 精品视频久久久久久| 亚洲午夜av电影| 久久久久久国产三级电影| 国产香蕉97碰碰久久人人| 色综合天天狠天天透天天伊人| 亚洲欧美日韩一区二区三区在线| 久久精视频免费在线久久完整在线看| 成人免费网站在线观看| 亚洲精品二三区| 亚洲男人av电影| 久久视频在线播放| 国产精品成久久久久三级| 亚洲美女在线视频| 激情久久av一区av二区av三区| 日韩av一区在线观看| 欧美天堂在线观看| 欧美一区二区.| 97人人爽人人喊人人模波多| 日韩久久免费电影| 欧美成年人视频网站欧美| 日韩精品在线观看一区| 青草青草久热精品视频在线观看| 欧美一区二区大胆人体摄影专业网站| 国产亚洲欧美一区| 欧美日韩国产精品| 久久夜色精品亚洲噜噜国产mv| 久久99精品久久久久久噜噜| 国产日韩欧美电影在线观看| 日韩在线观看免费全| 欧美影院久久久| 国产精品久久二区| 日韩黄色av网站| 亚洲一区二区国产| 精品福利免费观看| 狠狠爱在线视频一区| 久久久999成人| 自拍偷拍亚洲精品| 91高潮精品免费porn| 国产啪精品视频网站| 成人亚洲综合色就1024| 91豆花精品一区| 亚洲欧美三级伦理| 久久久久久久久久久网站| 亚洲性线免费观看视频成熟| 国产成人精品网站| 一区二区三区国产在线观看| 国产精品偷伦视频免费观看国产| 亚洲人成在线播放| 日韩在线视频免费观看高清中文| 青青精品视频播放| 亚洲人成在线播放| 亚洲自拍小视频| 亚洲精品成人免费| 国产精品久久久av久久久| 国内精品久久久久久| 欧美天天综合色影久久精品| 久久这里只有精品视频首页| 中文字幕精品影院| 欧美另类xxx| 57pao成人永久免费视频| 亚洲a中文字幕| 国产欧美精品在线播放| 国产日韩在线免费| 亚洲精品欧美极品| 国产精品视频久久久| 国产色婷婷国产综合在线理论片a| 国产精品美女久久| 美女av一区二区| 精品久久久久久久久久久久| 欧美日韩亚洲精品内裤| 欧美成人免费视频| 欧美成人性色生活仑片| 一区二区三区黄色| 懂色av一区二区三区| 精品国产欧美一区二区三区成人| 亚洲免费小视频| 久久精品免费播放| 一本色道久久88综合亚洲精品ⅰ| 欧美午夜无遮挡| 亚洲一区二区福利| 亚洲一区二区三区毛片| 国产日韩精品一区二区| 97国产一区二区精品久久呦| 日韩av在线免费| 人体精品一二三区| 亚洲欧美日本另类| 热99精品只有里视频精品| 国产91精品青草社区| 欧美电影免费观看高清| 国内精品一区二区三区| 国产精品亚洲美女av网站| 高清亚洲成在人网站天堂| 国产精品日韩专区| 日韩激情视频在线| 国产高清在线不卡| 欧美成年人在线观看| 欧美性猛交xxxx富婆弯腰| 伊人久久久久久久久久久| 欧美午夜激情在线| 米奇精品一区二区三区在线观看| 日本精品视频在线| 人人做人人澡人人爽欧美| 色一情一乱一区二区| 欧美专区在线播放| 日韩精品免费综合视频在线播放| 精品亚洲一区二区三区四区五区| 亚洲高清免费观看高清完整版| 欧美日本精品在线| 欧美日韩高清区| 国产精品v日韩精品| 国产精品亚洲美女av网站| 日韩中文字幕视频在线| 久久精品国产99国产精品澳门| 精品无码久久久久久国产| 欧美激情一级精品国产| 亚洲成avwww人| 亚洲国产欧美一区二区丝袜黑人| 性金发美女69hd大尺寸| 国产热re99久久6国产精品| 17婷婷久久www| 中文字幕亚洲一区二区三区五十路| 日韩在线视频观看正片免费网站| 韩国福利视频一区| 国内精品一区二区三区四区| 国产一区二区美女视频| 亚洲天堂久久av| 亚洲电影免费观看高清完整版在线| 亚洲精品美女久久久| 午夜精品www| 日韩欧美成人精品| 黑人精品xxx一区一二区| 亚洲永久在线观看| 成人xvideos免费视频| 欧美亚洲第一区| 亚洲视频在线观看免费| 欧美精品18videosex性欧美| 91久久久久久久久久久久久| 欧美大片在线影院| 中文字幕视频在线免费欧美日韩综合在线看| 欧美大成色www永久网站婷| 在线观看欧美www| 91国产视频在线播放| 欧美一级视频一区二区| 91性高湖久久久久久久久_久久99| 欧美在线视频观看免费网站| 欧美日韩电影在线观看| 国产精品18久久久久久麻辣| 亚洲视频999| 96精品久久久久中文字幕| 欧美一级片久久久久久久| 国产成人精品午夜| 欧美一区深夜视频| 国产一区二区三区18| 亚洲天堂第二页| 日韩激情在线视频| 亚洲一区二区三区在线免费观看| 亚洲电影av在线| 九九精品视频在线观看| 8090成年在线看片午夜|