Android 中 实现自定义 Dialog 提示框

发布于:2025-08-09 ⋅ 阅读:(21) ⋅ 点赞:(0)

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">
	
	    <TextView
	        android: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"/>
	
	    <Button
	        android: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.customview
	
	import android.content.Context
	import android.graphics.Color
	import android.os.Bundle
	import android.widget.Button
	import android.widget.TextView
	import androidx.appcompat.app.AppCompatDialog
	import androidx.core.graphics.drawable.toDrawable
	import com.android.androidfunctiondemo.R
	import com.android.androidfunctiondemo.utils.CommonUtils
	
	class HintDialog(context: Context): AppCompatDialog(context) {
	
	    fun interface OnClickListener {
	        fun onButtonOk()
	    }
	
	    private var textView: TextView? = null
	    private var listener: OnClickListener? = null
	
	
	    override fun onCreate(savedInstanceState: Bundle?) {
	        super.onCreate(savedInstanceState)
	        setContentView(R.layout.view_hint_dialog)
	
	        // 点击屏幕 dialog 不消失
	        setCanceledOnTouchOutside(false)
	
	        window?.let {
	            // 隐藏导航栏
	            CommonUtils.hideNavigationBar(it)
	            // 设置 dialog 背景为透明色,解决圆角背景图四角白色问题
	            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.androidfunctiondemo
	
	import android.os.Bundle
	import androidx.appcompat.app.AppCompatActivity
	import com.android.androidfunctiondemo.customview.HintDialog
	import com.android.androidfunctiondemo.databinding.ActivityMainBinding
	import com.android.androidfunctiondemo.utils.CommonUtils
	
	class MainActivity: AppCompatActivity() {
	
	    private lateinit var viewBinding: ActivityMainBinding
	    override 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()
	    }
	}

网站公告

今日签到

点亮在社区的每一天
去签到