1、功能说明
- 自定义一个简单的提示框,上方显示一个文本信息,下方显示一个确定按钮,效果如下:

2、实现步骤
- 创建自定义控件布局文件;
- 自定义提示框控件,继承自 AppCompatDialog;
- 使用自定义控件。
3、示例代码
(1)布局文件 view_hint_dialog.xml
<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="@dimen/dp_320"android:layout_height="@dimen/dp_220"xmlns:app="http://schemas.android.com/apk/res-auto"android:background="@mipmap/hint_dialog_bg"><TextViewandroid:id="@+id/hint_text"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textColor="@color/white"android:textSize="@dimen/sp_28"android:text="@string/hint"app:layout_constraintTop_toTopOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"android:layout_marginTop="@dimen/dp_50"/><Buttonandroid:id="@+id/button_ok"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@mipmap/button_bg"android:textColor="@color/white"android:textSize="@dimen/sp_24"android:text="@string/confirm"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"android:layout_marginBottom="@dimen/dp_30"/></androidx.constraintlayout.widget.ConstraintLayout>
(2)自定义控件 HintDialog.kt
package com.android.androidfunctiondemo.customviewimport android.content.Contextimport android.graphics.Colorimport android.os.Bundleimport android.widget.Buttonimport android.widget.TextViewimport androidx.appcompat.app.AppCompatDialogimport androidx.core.graphics.drawable.toDrawableimport com.android.androidfunctiondemo.Rimport com.android.androidfunctiondemo.utils.CommonUtilsclass HintDialog(context: Context): AppCompatDialog(context) {fun interface OnClickListener {fun onButtonOk()}private var textView: TextView? = nullprivate var listener: OnClickListener? = nulloverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.view_hint_dialog)setCanceledOnTouchOutside(false)window?.let {CommonUtils.hideNavigationBar(it)it.setBackgroundDrawable(Color.TRANSPARENT.toDrawable())}textView = findViewById(R.id.hint_text)val button = findViewById<Button>(R.id.button_ok)button?.setOnClickListener {listener?.onButtonOk()}}fun setMessage(message: String) {textView?.text = message}fun setButtonListener(listener: OnClickListener) {this.listener = listener}}
- setCanceledOnTouchOutside:设置用户点击 Dialog 外的区域时,Dialog 不会消失。
- setBackgroundDrawable(Color.TRANSPARENT.toDrawable()):设置 Dialog 的背景色为透明,否则圆角背景图的四角会有白色显示,如下图所示:

(3)使用自定义控件
package com.android.androidfunctiondemoimport android.os.Bundleimport androidx.appcompat.app.AppCompatActivityimport com.android.androidfunctiondemo.customview.HintDialogimport com.android.androidfunctiondemo.databinding.ActivityMainBindingimport com.android.androidfunctiondemo.utils.CommonUtilsclass MainActivity: AppCompatActivity() {private lateinit var viewBinding: ActivityMainBindingoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)viewBinding = ActivityMainBinding.inflate(layoutInflater)setContentView(viewBinding.root)CommonUtils.hideNavigationBar(window)viewBinding.textView.setOnClickListener {showHintDialog()}}private fun showHintDialog() {val hintDialog = HintDialog(this)hintDialog.setMessage("提交成功")hintDialog.setButtonListener {hintDialog.dismiss()}hintDialog.show()}}