安卓仿Toasty消息弹框

【Android】消息提示toast和context 后两位是x、y的距离。Toast.makeText(this, 显示的内容, 显示时间长度).show();前者生命周期长,后者短,用完就回收。this:当前activity对象。 阅读详情

Toast是安卓非常常用的消息弹框之一,但是原生的弹框过于朴素,无法适应不同场景的样式需求,因此设计一个类似于Toasty的弹框构建工具。

 不废话直接上代码

import android.content.Context;
import android.os.Looper;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout.LayoutParams;
import androidx.annotation.Nullable;
import com.cpk.yeahtoast.R.color;
import com.cpk.yeahtoast.R.drawable;

/**
*Yet Another Toast Util.
*@author pinkman
*/
public class YeahToast {
    private static final String TAG = YeahToast.class.getSimpleName();
    public static final int STYLE_NO = 0;
    public static final int STYLE_INFO = 1;
    public static final int STYLE_WARN = 2;
    public static final int STYLE_ERROR = 3;
    public static final int STYLE_SUCCESS = 4;
    private static YeahToast.StyleToast styleToast = null;

public static void show(Context context, String text, @Nullable Integer length) {
        show(context, STYLE_NO , text, length);
    }

    public static void showInfo(Context context, String text, @Nullable Integer length) {
        prepare(context, STYLE_INFO , text, length).show();
    }

    public static void showError(Context context, String text, @Nullable Integer length) {
        prepare(context, STYLE_ERROR , text, length).show();
    }

    public static void showWarn(Context context, String text, @Nullable Integer length) {
        prepare(context, STYLE_WARN , text, length).show();
    }

    public static void showSuccess(Context context, String text, @Nullable Integer length) {
        prepare(context, STYLE_SUCCESS , text, length).show();
    }

    protected static StyleToast prepare(Context context, int style, String text, @Nullable Integer length) {
        if (styleToast != null) {
            styleToast.cancel();
        }
styleToast = new YeahToast.StyleToast(context, style, text, length);
        return styleToast;
    }
}

StyleToast是用于设置Toast样式的封装类,可以设为子类,也可以新建一个类。带样式的弹框是用Toast的setView方法将一个自定义的布局作为toast显示内容,本封装类设置Toast的布局有一个图标和文本。

/**
*@author pinkman
*/
public static class StyleToast {
        Toast toast;
        ViewGroup view;
        TextView tv;
        ImageView icon;

        public StyleToast(Context context, int style, String message, @Nullable Integer length) {
            this.toast = new Toast(context);
            this.view = new LinearLayout(context);
            this.view.setPadding(8, 8, 8, 8);
            this.tv = new TextView(context);
            LayoutParams imageLp = new LayoutParams(-2, -2);
            imageLp.setMargins(8, 8, 8, 8);
            this.icon = new ImageView(context);
            this.icon.setScaleType(ScaleType.FIT_CENTER);
            this.icon.setLayoutParams(imageLp);
            LayoutParams textLp = new LayoutParams(-2, -2);
            textLp.setMargins(8, 8, 8, 8);
            this.tv.setTextSize(16.0F);
            this.tv.setTextColor(context.getResources().getColor(color.colorWhite));
            this.tv.setText(message);
            this.tv.setGravity(17);
            this.tv.setTextAlignment(4);
            this.tv.setLayoutParams(textLp);
            this.view.addView(this.icon);
            this.view.addView(this.tv);
            this.view.setLayoutParams(new android.view.ViewGroup.LayoutParams(-2, -2));
            this.toast.setView(this.view);
            this.toast.setDuration(length == null ? 0 : length);
            switch(style) {
            case 1:
                this.view.setBackgroundResource(drawable.toast_style_info);
                this.icon.setImageResource(drawable.ic_error_outline_white_24dp);
                break;
            case 2:
                this.view.setBackgroundResource(drawable.toast_style_warn);
                this.icon.setImageResource(drawable.ic_warning_white_24dp);
                break;
            case 3:
                this.view.setBackgroundResource(drawable.toast_style_error);
                this.icon.setImageResource(drawable.ic_close_white_24dp);
                break;
            case 4:
                this.view.setBackgroundResource(drawable.toast_style_success);
                this.icon.setImageResource(drawable.ic_done_black_24dp);
                break;
            default:
                this.view.setBackgroundResource(drawable.toast_style_default);
                this.icon.setVisibility(8);
            }

        }

        public void show() {
            this.toast.show();
        }

        private void cancel() {
            this.toast.cancel();
        }
    }

所有资源都是xml文件,放在drawable里。

<!--边框-->
<!--toast_style_warn.xml-->
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle"
    >
    <stroke android:width="0.8dp"
        android:color="#555"/>
    <solid android:color="#FA5324"/>

    <corners android:bottomRightRadius="16dp"
        android:bottomLeftRadius="16dp"
        android:topRightRadius="16dp"
        android:topLeftRadius="16dp"
        />
</shape>

<!--toast_style_success.xml-->
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle"
    >
    <stroke android:width="0.8dp"
        android:color="#666"/>
    <solid android:color="#4FEE5F"/>

    <corners android:bottomRightRadius="16dp"
        android:bottomLeftRadius="16dp"
        android:topRightRadius="16dp"
        android:topLeftRadius="16dp"
        />
</shape>

<!--toast_style_error.xml-->
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle"
    >
    <stroke android:width="0.8dp"
        android:color="#888"/>
    <solid android:color="#EE2344"/>

    <corners android:bottomRightRadius="16dp"
        android:bottomLeftRadius="16dp"
        android:topRightRadius="16dp"
        android:topLeftRadius="16dp"
        />
</shape>

<!--toast_style_info.xml-->
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle"
    >
    <stroke android:width="0.8dp"
        android:color="#555"/>
    <solid android:color="#3366A5"/>

    <corners android:bottomRightRadius="16dp"
        android:bottomLeftRadius="16dp"
        android:topRightRadius="16dp"
        android:topLeftRadius="16dp"
        />
</shape>

<!--toast_style_default.xml-->
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle"
    >
    <stroke android:width="0.8dp"
            android:color="#EEE"/>
    <solid android:color="#888"/>

    <corners android:bottomRightRadius="16dp"
        android:bottomLeftRadius="16dp"
        android:topRightRadius="16dp"
        android:topLeftRadius="16dp"
        />
</shape>

<!--------------------------------------------------------------------------------->

<!--ic_error_outline_white_24dp.xml-->
<vector android:height="24dp" android:tint="#FDFDFD"
    android:viewportHeight="24.0" android:viewportWidth="24.0"
    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
    <path android:fillColor="#FF000000" android:pathData="M11,15h2v2h-2zM11,7h2v6h-2zM11.99,2C6.47,2 2,6.48 2,12s4.47,10 9.99,10C17.52,22 22,17.52 22,12S17.52,2 11.99,2zM12,20c-4.42,0 -8,-3.58 -8,-8s3.58,-8 8,-8 8,3.58 8,8 -3.58,8 -8,8z"/>
</vector>


<!--ic_close_white_24dp.xml-->
<vector android:height="24dp" android:tint="#FDFDFD"
    android:viewportHeight="24.0" android:viewportWidth="24.0"
    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
    <path android:fillColor="#FF000000" android:pathData="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z"/>
</vector>

<!--ic_warning_white_24dp.xml-->
<vector android:height="24dp" android:tint="#FDFDFD"
    android:viewportHeight="24.0" android:viewportWidth="24.0"
    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
    <path android:fillColor="#FF000000" android:pathData="M1,21h22L12,2 1,21zM13,18h-2v-2h2v2zM13,14h-2v-4h2v4z"/>
</vector>

<!--ic_done_white_24dp.xml-->
<vector android:height="24dp" android:tint="#FDFDFD"
    android:viewportHeight="24.0" android:viewportWidth="24.0"
    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
    <path android:fillColor="#FF000000" android:pathData="M9,16.2L4.8,12l-1.4,1.4L9,19 21,7l-1.4,-1.4L9,16.2z"/>
</vector>

使用方式很简单,比如想在Activity弹出一个长警告就用YeahToast.showWarn(this,"warn!",Toast.LENGTH_LONG);

因为Toast是系统默认的一种弹窗,无法自定义时长,只能为Toast.LENGTH_SHORT(2.5秒)或Toast.LENGTH_LONG(3秒),对自定义的支持不是很好,而且显示内容也受限制(比如不能播放声音),在Android9版本中甚至不支持播放长Toast,且在11版本中弃用了setView方法,这意味着本工具类可能就要失效了。

Android:你真的会用Toast吗(介绍安卓好看简约的Toast快速解锁方法) 快速应用安卓开发当中的好看简约的Toast组件 阅读详情

相关推荐

深入解析Toasty单例化技术在Android中的应用

在设计模式中,单例模式是一种常用的创建型设计模式。它确保一个类只有一个实例,并提供一个全局访问点供外部获取该实例。单例模式适用于那些需要全局统一管理,并且实例只会存在一个的场景,比如应用程序中管理数据库连接、配置管理器、日志管理器等。单例模式有以下特点:全局只有一个实例:无论你创建多少次对象,单例模式保证只会创建一个对象实例。提供全局访问点:单例类通常会提供一个静态方法来供外部访问这个唯一实例。延迟初始化:单例的实例通常会在首次使用时创建,这称为懒汉式初始化。线程安全。

weixin_42181686的博客 919

弹窗系列:Toast类如何实现在任意Activity上显示提示?

关于Toast源码中,如何一步一步实现显示提示, 这篇文章 Android Toast源码分析 写得很详细,可以参考。 我们能不能根据Toast源码中的原理,自己实现一个简单的Toast提示了?当然可以。参考这篇文章:使用WindowManager自定义toast 下面贴出,我改进后的代码: public class Toast { public static final int LENGTH_SHORT = 0; public static final int LENGT..

知道这个有什么用? 2055

ContextCapture导入点云进行重建

ContextCapture导入点云进行重建

天桥飞熊的博客 1万+

Android逆向(四)弹Toast

上一篇博客,介绍了反编译后如何修改资源文件,修改资源文件几乎不会设计Java源代码的修改,只需要修改xml文件。接下来的博客,将会介绍和总结一下,如何修改原有的逻辑和功能代码。与修改资源文件不同,修改原有的功能逻辑代码将涉及到smali代码的修改。smali的语法我个人认为不需要完全掌握,我也只是研究了那么几天时间。 我们还是用上一篇博客用到的apk。先看一下我们...

zhaojun的博客 2万+

从扇束到平行束:等角重排算法在CT重建中的核心原理与MATLAB实践

本文深入解析了CT图像重建中等角扇束重排算法的核心原理与MATLAB实现。通过将实际采集的扇束投影数据,利用几何映射和两次关键插值,转换为适用于经典滤波反投影算法的平行束数据,打通了高效重建的关键路径。文章结合Shepp-Logan模型仿真,提供了完整的MATLAB代码实践,并分析了源-物距、采样率等关键参数对重建质量的影响。

cnn8visionary的博客 645

IEEE PHM 2012轴承数据实战:用LSTM预测剩余寿命的完整流程与调参心得

本文详细解析了如何利用IEEE PHM 2012轴承数据集和LSTM模型进行轴承剩余寿命预测。从数据预处理、特征工程到LSTM模型架构设计和调参技巧,提供了完整的实战流程。特别分享了FEMTO-ST数据集的处理方法、RUL标签构建策略以及提升预测精度的关键技巧,帮助工程师实现更准确的预测性维护。

weixin_31100517的博客 367

qt for Android使用原生方式和自建类方式实现toast效果

本博介绍个人使用toast心得,现在 还未搞清楚,一点点来,这几天研究这个,目前还未学习qt for Android 的qml使用,暂时也没 时间去研究,所以就简单的先用c++实现,采用qt widget界面方式。toast效果实现两种方式,一种是原生调用,就得构建类去调用java的源代码,还有一种是自己写一种方式去实现toast的效果,下面我会详细介绍两种方式的 纯小白也能学会的创建和使用方式,...

kbq的博客 1874

IEEE S&P 2026 大模型安全论文整理

本文梳理了 IEEE S&P 2026(第47届 IEEE 安全与隐私研讨会)中与 LLM Safety 相关的论文,涵盖大模型越狱攻击、防御与对齐、隐私保护、RAG 安全、多模态大模型安全、智能体安全、图-LLM 安全、工具链安全及生成式 AI 安全与隐私等方向。

CSPhD-winston的博客 1328

Toasty 开源项目使用教程

Toasty 项目的目录结构如下: ``` Toasty/ ├── app/ │ ├── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── github/ │ │ │ │ └── grender/ │ │ │ │...

gitblog_00654的博客 1011

Superpowers与 OpenSpec、Spec Kit 对比

按照官方仓库定义,Superpowers 是一套构建在 composable skills 之上的完整软件开发工作流。它不是单纯的 prompt 集合,而是把一系列工程动作做成默认流程。一个需要明确的点:Superpowers 并不只偏 Claude Code,根据。

人不风流枉少年 1811

华为OD机试 - TLV格式(Python/JS/C/C++ 2025 C卷 100分)

两端通过TLV格式的报文来通信,现在收到对端的一个TLV格式的消息包,要求生成匹配后的(tag,length,valueOffset)列表。和需要匹配的n个tag对应的n行匹配结果,每一行由长度和偏移量组成。第二行:需要匹配的tag数量n(0 < n < 1000)后面N行:需要匹配n个tag值(十进制表示),递增排列。标签10(0A)存在,长度3,valueOffset=2。标签15(0F)长度4,valueOffset=2。标签14(0E)长度2,valueOffset=8。

学Java,找哪吒 2036

终极Toasty配置指南:打造个性化Android消息提示

Toasty是一款为Android应用提供增强型Toast消息的开源库,通过它可以轻松实现自定义字体、大小、位置和主题等高级设置,让你的应用消息提示既美观又实用。 ## 为什么选择Toasty? 传统的Android Toast功能单一、样式单调,而Toasty则为开发者提供了丰富的自定义选项。无论是错误提示、成功通知还是信息展示,Toasty都能让你的消息提示在视觉上脱颖而出,提升用户体验。

gitblog_01426的博客 581

uniapp - 如何跟内嵌 web-view 组件内的网页交互,与 web-view 内嵌网页进行双向通信(uniapp 与 webview 网页之间的 “相互“ 传值)提供详细的示例代码及解决方案

uni-app如何实现在H5环境中与web-view中的网页交互通讯uniappuni-app 与 web-view内嵌网页 双向通信 如何跟内嵌web-view交互uniappAPP与webview子页面交互uniappAPP与webview子页面交互关于uni-app 使用 web-view 页面之间互相跳转、通信等问题uniapp的web-view嵌入网页,网页与uniapp通信webview如何与uniapp写的H5页面交互嵌套webview调用uniapp各种API组件实现H5和app通讯和交互

✅ 精选推荐文章 1万+

基准测试报告:Qwen3.8-27B-NVFP4与BF16原版差距有多大?6大基准深度解读

NVIDIA 发布的 **Qwen3.8-27B-NVFP4** 是基于 Qwen3.8-27B 的多模态语言模型量化版本,采用 NVFP4 + FP8 混合精度,由 Model Optimizer 校准生成。本文通过官方公布的 **6 大基准测试**(GPQA Diamond、Terminal-Bench、AA-LCR、MMMU-Pro、SciCode、IFBench)逐项对比 NVFP4 量化

gitblog_00733的博客 454

STM32实战开发(66):STM32图像处理开发教程

随着物联网、人工智能和嵌入式技术的不断发展,图像处理技术在嵌入式系统中的应用越来越广泛。图像处理不仅在视觉识别、安防监控、智能家居等领域中发挥着重要作用,也在工业自动化、医疗成像、无人驾驶等高科技领域中占据重要地位。而STM32凭借其强大的硬件性能和丰富的外设支持,成为了许多图像处理应用的理想平台。

2201_76125393的博客 1444

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Toasty的使用以及简单封装

,toasty的使用。为啥要用toasty呢,咳咳,大家都用过安卓自带的toast,试想这样一个场景,你正在使用一个五彩斑斓,各种炫酷动画层出不穷的APP,突然冒出了这样的图片。。。 这样颜值不高的东西,怎么能找到女友呢,呸,怎么能获得用户喜欢呢,所以,我们要提高颜值! 在本节以前,会用到以前文章所讲过的东西,避免重复,就直接给地址 一、全局使用context 好了,那先来看...

hdhhd的博客 1128

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Toasty队列管理:Android应用避免Toast堆积的终极指南

在Android应用开发中,Toast消息是常见的用户反馈机制,但多个Toast同时显示会造成消息堆积,影响用户体验。Toasty作为强大的Toast增强库,提供了智能的队列管理功能,让消息显示更加有序和高效。💡 ## 为什么需要Toast队列管理? 传统Android Toast存在一个严重问题:当连续触发多个Toast时,它们会依次排队显示,造成消息堆积。用户需要等待很长时间才能看到所有

gitblog_01407的博客 996

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Android做封装,Android Toasty的使用以及简单封装

释放双眼,带上耳机,听听看~!,toasty的使用。为啥要用toasty呢,咳咳,大家都用过安卓自带的toast,试想这样一个场景,你正在使用一个五彩斑斓,各种炫酷动画层出不穷的APP,突然冒出了这样的图片。。。这样颜值不高的东西,怎么能找到女友呢,呸,怎么能获得用户喜欢呢,所以,我们要提高颜值!在本节以前,会用到以前文章所讲过的东西,避免重复,就直接给地址好了,那先来看看使用toasty之后的效...

weixin_32039589的博客 820

Android 开源框架 -Toasty

GitHub地址 用法: 第一步:根目录的 build.gradle: allprojects { repositories { ... maven { url "https://jitpack.io" } } } 第二步:自己module中的build.gradle dependencies { ...

dingqiu6270的博客 145

Toasty

库 Toasty 初始化 ToastyInitConfigure package application; import android.graphics.Typeface; import widget.toast.Toasty; /** * Created on 2019/5/13. * * @author 郑少鹏 * @desc Toasty初始化配置 */ class Toa...

snpmyn 486

如何使用Toasty打造精美Android提示消息:从基础到高级的完整指南

Toasty是一个功能强大的Android Toast增强库,它让原本单调的系统提示消息变得更加美观和实用。通过Toasty,开发者可以轻松创建带有图标、自定义颜色和样式的提示消息,提升应用的用户体验。本文将详细介绍如何在Android项目中集成和使用Toasty,以及如何根据需求进行个性化定制。 ## Toasty与系统Toast的核心区别 Android系统自带的Toast虽然简单实用,但

gitblog_07589的博客 522

Android第三方库——Toasty

  一、导入gradle添加依赖   1.将它添加到您的根build.gradle文件   allprojects { repositories { jcenter() //第一步 maven { url "https://jitpack.io" } } } 2.将其添加到你的项目build.gradle文件   ...

记录生活中的点滴美好,活在当下! 6941

安卓基础组件016--第三方Toasty组件。

Toasty允许开发者通过类全局配置Toast的样式。.apply();### 安卓基础组件:第三方Toasty组件详解Toasty是一款流行的第三方Android库,用于简化Toast消息的显示。与原生Toast相比,Toasty提供了更多自定义选项,包括颜色、图标、字体等,使开发者能够快速创建美观且功能丰富的提示消息。### Toasty的核心功能Toasty支持多种消息类型,包括普通消息、成功消息、错误消息、警告消息和信息消息。每种类型都有默认的图标和颜色,开发者也可以自定义这些属性。

XGI_baor的博客 297

如何在5分钟内快速集成Toasty到你的Android项目:终极指南

想要让你的Android应用拥有更美观、更专业的Toast提示吗?Toasty就是你的最佳选择!这是一个功能强大的Android库,能够为你的应用添加各种彩色Toast、带图标的提示和自定义样式的消息通知。在本文中,我将为你展示如何在短短5分钟内完成Toasty的快速集成。 ## 📱 为什么选择Toasty? Toasty不仅仅是普通的Toast,它带来了全新的用户体验。通过丰富的颜色编码、

gitblog_01416的博客 697

终极Android Toast增强库:Toasty的10个实战案例全解析

Toasty是一个功能强大的Android Toast增强库,它为传统Toast添加了丰富的样式定制、图标支持和主题适配能力。本文将通过10个真实项目案例,展示如何利用Toasty提升用户体验,让你的应用通知更加生动和专业。 ## 📋 Toasty核心功能概览 Toasty扩展了Android原生Toast的功能,提供了多种预设样式和自定义选项。从源码[toasty/src/main/jav

gitblog_00307的博客 488
上一篇: JZ6 从尾到头打印链表
下一篇: 【安卓】渐入式文本控件GraduallyTextView
Coder.Chen+
博客等级 码龄5年 53粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值