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

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.dtcms.com/a/320904.html

相关文章:

  • @CacheConfig​​当前类中所有缓存方法详解
  • Go语言实战案例:简易JSON数据返回
  • Linux多线程——生产者消费者模型
  • 芯科科技成为全球首家通过PSA 4级认证的物联网芯片厂商巩固其在物联网安全领域的领导地位
  • 从零开始构建【顺序表】:C语言实现与项目实战准备
  • 《汇编语言:基于X86处理器》第12章 浮点数处理与指令编码(2)
  • 【JavaEE】(10) JavaEE 简介
  • 虚幻基础:场景actor与角色的碰撞
  • 走进Linux世界:make和makefile
  • 深入浅出线程池ThreadPoolExecutor
  • 机器人焊机智能流量调节
  • SwiftUI中的键盘快捷键、初始页面控制及网络权限管理解析
  • linux-LVM 逻辑卷管理
  • Windows域控制器部署最佳实践
  • (1-9-1) Maven 特性、安装、配置、打包
  • 安全扫描:检测到目标站点存在javascript框架库漏洞问题(vue)
  • DQL 超维分析 - 5 集算器 DQL
  • 【网络】TCP/UDP协议
  • 通过上下文工程优化LangChain AI Agents(二)
  • 佳维视高亮度工业显示器,强光环境清晰可见
  • 从深度伪造到深度信任:AI安全的三场攻防战
  • 饿了么零售 sign 分析
  • WPF 动画卡顿
  • 技术速递|GPT-5 正式上线 Azure AI Foundry
  • [激光原理与应用-176]:测量仪器 - 频谱型 - AI分类与检测相对于传统算法的优缺点分析
  • 人工智能与智能家居:家居生活的变革
  • sqlite的sql语法与技术架构研究
  • 安装向量数据库chromadb
  • GPT-5测试后全面解析:性能突破、用户反馈与未来展望
  • 若依前后端分离版学习笔记(七)—— Mybatis,分页,数据源的配置及使用