当前位置: 首页 > ops >正文

Android 中 实现自定义 Dialog 提示框

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)// 点击屏幕 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.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()}}
http://www.xdnf.cn/news/17268.html

相关文章:

  • 32-Hive SQL DML语法之查询数据
  • 无人机仿真环境搭建
  • 软件包管理、缓存、自定义 YUM 源
  • 基于Vue.js和Golang构建高效在线客服系统:前端实现与后端交互详解
  • Linux网络--1、网络基础
  • 分布式系统性能优化实战:从瓶颈定位到架构升级
  • [GESP2023012 五级] 2023年12月GESP C++五级上机题题解,附带讲解视频!
  • c++初学day1(类比C语言进行举例,具体原理等到学到更深层的东西再进行解析)
  • WiFi 核心概念与实战用例全解
  • 17.14 CogVLM-17B多模态模型爆肝部署:4-bit量化+1120px高清输入,A100实战避坑指南
  • SimpleMindMap:一个强大的Web思维导图
  • CVRF 是什么?微软弃用 MS 编号后,网络安全的下一个标准
  • 【面经】2025年软件测试面试题,精选100 道(附答案)
  • 为什么通过CreateThread创建的线程调用C/C++运行库函数不稳定
  • 交换机100G模块远距离连接踩坑记录
  • Vibe coding现在能用于生产吗?
  • “鱼书”深度学习进阶笔记(1)第二章
  • 弱电+机房+设备+运维资料合集方案(Word+PPT)
  • trae开发c#
  • Vue3 计算属性与监听器
  • 【MATLAB例程】联邦卡尔曼滤波,主滤波与子滤波融合GPS、IMU、里程计多传感器数据。提供源代码下载链接
  • Zabbix网络发现:自动化监控新利器
  • apiSQL网关调优:释放单节点的最大潜能
  • Trackio:面向机器学习者的本地优先、开源免费的轻量级实验追踪新工具
  • (Arxiv-2025) CINEMA:通过基于MLLM的引导实现多主体一致性视频生成
  • Docker 从入门到实战(一):全面解析容器化革命 | 2025 终极指南
  • Vue 3.2+ 引入的指令 v-memo 性能优化
  • 书生浦语第五期-L1G3-LMDeploy 课程
  • Mac 电脑放在环境变量中的通用脚本
  • Mac下安装Conda虚拟环境管理器