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

Android 自定义Toast

一、背景

自定义Toast背景、布局、显示时长、位置、图标等,根据需要调用。如:纯文本的Toast、包含文本和icon的Toast

二、代码实现

ToastUtil.kt
package com.vc.psclient.utilsimport android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.widget.ImageView
import android.widget.TextView
import android.widget.Toast
import androidx.annotation.DrawableRes
import com.vc.psclient.PsClientApplication
import com.vc.psclient.R/*** @Description : ToastUtil*/
class ToastUtil {private var mToast: Toast?=null// 默认显示时长private  val DEFAULT_DURATION = Toast.LENGTH_SHORTcompanion object {private var toastUtilInstance: ToastUtil? = nullget() {if (null == field) {field = ToastUtil()}return field}@Synchronizedfun getInstance(): ToastUtil {return toastUtilInstance!!}}/*** 显示自定义Toast* @param message 显示的消息* @param iconResId 图标资源ID (可选)* @param duration 显示时长 (Toast.LENGTH_SHORT 或 Toast.LENGTH_LONG)* @param gravity 显示位置 (Gravity.CENTER, Gravity.TOP 等)* @param xOffset x轴偏移量* @param yOffset y轴偏移量*/fun showToast(message: String,@DrawableRes iconResId: Int?=null,duration: Int = DEFAULT_DURATION,gravity: Int = Gravity.BOTTOM or Gravity.CENTER_HORIZONTAL,xOffset: Int = 0,yOffset: Int = 100,){cancelToast()mToast = Toast.makeText(PsClientApplication.instance, "", duration)// 设置位置mToast!!.setGravity(gravity, xOffset, yOffset)val view= LayoutInflater.from(PsClientApplication.instance).inflate(R.layout.layout_toast, null)val textView=view.findViewById<TextView>(R.id.tv_msg)textView.text = messageif(iconResId!=null){val iv=view.findViewById<ImageView>(R.id.iv_icon)iv.visibility=View.VISIBLEiv.setImageResource(iconResId)}mToast!!.view=viewmToast!!.show()}private fun cancelToast(){if(mToast!=null){mToast!!.cancel()mToast=null}}
}

布局文件

layout_toast.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="center_horizontal"android:orientation="horizontal"android:minWidth="@dimen/dp_162"android:minHeight="@dimen/dp_40"android:layout_marginStart="@dimen/dp_30"android:layout_marginEnd="@dimen/dp_30"android:background="@drawable/toast_bg"><Viewandroid:layout_width="@dimen/dp_8"android:layout_height="@dimen/dp_3"/><ImageViewandroid:id="@+id/iv_icon"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_vertical"android:layout_marginEnd="@dimen/dp_3"android:visibility="gone"/><TextViewandroid:id="@+id/tv_msg"android:layout_width="0dp"android:layout_weight="1"android:layout_height="wrap_content"android:layout_gravity="center"android:gravity="center_horizontal"android:textSize="@dimen/sp_12"android:textColor="#ffeaecef"android:maxLines="2"android:ellipsize="end"android:layout_marginEnd="@dimen/dp_8"/></LinearLayout></FrameLayout>
toast_bg.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle"><corners android:radius="@dimen/dp_8" /><solid android:color="#b3000000" />
</shape>

http://www.dtcms.com/a/330518.html

相关文章:

  • Redis 03 redis 缓存异常
  • XCTF-warmup详细题解(含思考过程)
  • Android数据缓存目录context.getCacheDir与Environment.getExternalStorageDirectory
  • 飞算JavaAI合并项目实战:7天完成3年遗留系统重构
  • ASQA: 面向模糊性事实问题的长格式问答数据集与评估框架
  • 微服务从0到1
  • Linux基本使用和Java程序部署(含 JDK 与 MySQL)
  • 电子电路学习日记
  • 飞算JavaAI:革新Java开发体验的智能助手
  • 零基础数据结构与算法——第七章:算法实践与工程应用-搜索引擎
  • JUC学习笔记-----LinkedBlockingQueueConcurrentLinkedQueueCopyOnWriteArrayList
  • Nginx学习笔记(八)—— Nginx缓存集成
  • c++26新功能—多维数组视图
  • iOS混淆工具有哪些?游戏 App 防护下的混淆与加固全攻略
  • 【Linux基础知识系列】第九十四篇 - 如何使用traceroute命令追踪路由
  • 使用Docker安装MeiliSearch搜索引擎
  • 从零开始的云计算生活——激流勇进,kubernetes模块之Pod资源对象
  • 使用 Rust 进行 Web 自动化入门
  • npm删除包
  • 基于Redisson的分布式锁原理深度解析与优化实践
  • OpenCV图像处理2:边界填充与平滑滤波实战
  • VSC遇到的问题:无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本。
  • QT+Yolov8 推理部署,ONNX模型 ,实例分割+目标检测
  • 计算机视觉CS231n学习(9)
  • VLMs开发——基于Qwen2.5-VL 实现视觉语言模型在目标检测中的层级结构与实现方法
  • 【CV 目标检测】R-CNN①——Overfeat
  • PyCharm性能优化与大型项目管理指南
  • Linux 路由表建立过程分析
  • 开疆智能Ethernet转ModbusTCP网关连接UR机器人配置案例
  • LeetCode 面试经典 150_数组/字符串_最后一个单词的长度(19_58_C++_简单)(反向遍历)