自定义Android Toast

android 自定义Toast 吐司 3.自定义带图片的Toast显示实现代码如下:4.完全自定义的Toast显示实现代码:5.长时间显示的Toast显示6.自定义Toast的布局如下: 阅读详情


Android Toast在开发中经常使用,多用于向用户展示提示信息,只不过系统的Toast有些太单调了,不够美观,下面介绍一种超简单的自定义Toast的方式:

在介绍自定义Toast之前,和大家一起看几行系统Toast的源码:

public static Toast makeText(Context context, CharSequence text, @Duration int duration){
        Toast result = new Toast(context);

        LayoutInflater inflate = (LayoutInflater)
                context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View v = inflate.inflate(com.android.internal.R.layout.transient_notification, null);
        TextView tv = (TextView)v.findViewById(com.android.internal.R.id.message);
        tv.setText(text);
        
        result.mNextView = v;
        result.mDuration = duration;

        return result;
}
这是系统Toast的mekeText()方法,大家天天都在用,源码很简单:new 一个Toast对象,加载一个布局页面(一个简单的TextView),把要显示的内容设置到TextView上,方法返回该Toast对象。[就这么简单]
我们自定义Toast其实只想改变Toast的UI,让它更美观一些,甚至加一些我们的东西进去(图标之类的),核心代码就是makeText方法,通过修改这个方法完全可以随心所欲的定义我们的Toast。

下面说一下我自定义Toast的思路:

1.创建一个类Toast(类名与系统相同是为了我们的书写习惯考虑)

2.定义makeText方法(定义与系统相同的makeText方法,核心是换成我们自定义的布局)

就是这么简单!看完代码就明白了…

public class Toast {
    public @interface Duration {
    }

    /**
     * Show the view or text notification for a short period of time.  This time
     * could be user-definable.  This is the default.
     */
    public static final int LENGTH_SHORT = 0;

    /**
     * Show the view or text notification for a long period of time.  This time
     * could be user-definable.
     */
    public static final int LENGTH_LONG = 1;

    private Toast() {
    }

    /**
     * Make a standard toast that just contains a text view.
     *
     * @param context  The context to use.  Usually your {@link android.app.Application}
     *                 or {@link android.app.Activity} object.
     * @param text     The text to show.  Can be formatted text.
     * @param duration How long to display the message.  Either {@link #LENGTH_SHORT} or
     *                 {@link #LENGTH_LONG}
     */
    public static android.widget.Toast makeText(Context context, CharSequence text, @Duration int duration) {
        android.widget.Toast result = new android.widget.Toast(context);

        LayoutInflater inflate = (LayoutInflater)
                context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View v = inflate.inflate(R.layout.transient_notification, null);
        TextView tv = (TextView) v.findViewById(R.id.message);
        tv.setText(text);
        result.setView(v);
        result.setDuration(duration);

        return result;
    }

    /**
     * Make a standard toast that just contains a text view with the text from a resource.
     *
     * @param context  The context to use.  Usually your {@link android.app.Application}
     *                 or {@link android.app.Activity} object.
     * @param resId    The resource id of the string resource to use.  Can be formatted text.
     * @param duration How long to display the message.  Either {@link #LENGTH_SHORT} or
     *                 {@link #LENGTH_LONG}
     * @throws Resources.NotFoundException if the resource can't be found.
     */
    public static android.widget.Toast makeText(Context context, @StringRes int resId, @Duration int duration)
            throws Resources.NotFoundException {
        return makeText(context, context.getResources().getText(resId), duration);
    }

}
核心是makeText(Context context, CharSequence text, @Duration int duration)方法,仍然是创建系统Toast,关键点是加载我们自己的transient_notification.xml布局文件,细心的朋友可能还会看到:处理根布局View和duration两个变量,我们分别使用系统Toast提供的setView和setDuration两个public方法。
transient_notification.xml

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@android:drawable/toast_frame"
    android:gravity="center"
    android:orientation="vertical">

    <TextView
        android:id="@+id/message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:drawableLeft="@mipmap/qq"
        android:drawableRight="@mipmap/qq"
        android:shadowColor="#BB000000"
        android:shadowRadius="2.75"
        android:textAppearance="@style/TextAppearance.Toast"
        android:textColor="#1bb5d7"/>

</LinearLayout>
需要什么样式的Toast,就定义自己的transient_notification.xml布局就可以,显示图片还是文字完全由你掌控!
我们的Toast定义完了,怎么用呢?

Toast.makeText(MainActivity.this, "自定义toast", Toast.LENGTH_LONG).show();
看到这行代码有没有很亲切!没错,我们的自定义Toast就是这么用的!

只有一点不同,不要再导入系统的Toast类了,用自己定义的,连包都不需要导入了!

import android.widget.Toast;//删掉这句,无需导包

.apk安装包下载


Demo源码下载

Android 开发中自定义Toast 自定义Toast可设置不同时长以及显示自定义的布局 阅读详情

相关推荐

Android 11 下 Toast 变化,不能自定义 Toast 了?

自定义 Toast「不能」在 app 处于后台时显示,取而代之会显示的文本 toast禁止后台自定义 Toast普通的text toast不受影响普通的 text toast 不受影响默认的 toast 是text toast,如果想使用自定义的 toast ,需要调用 setView() 方法在 targetSdkVersion 为 R 或更高时,调用 setGravity 和 setMargin 方法将不进行任何操作❝官方文档中所述的 Android R 仅影响。

2401_89174745的博客 1112

Android 自定义Toast

先创建用作Toast的背景样式,这里就是黑色有一点点透明的圆角背景。然后是Toast的布局,创建,我这里只放了文本,有兴趣的可以在布局里加上图片之类的。

yihanss的博客 2192

Android封装自定义Toast

怎么改变Android默认Toast的颜色和大小,自定义我们自己需要的效果? 效果图: ps:想体验效果的伙伴可以去华为应用市场下载《扬帆心理》APP。(本人在大二时开发的) 思路:我在这里封装了一个Toast工具类,这样在想用时,直接调用里面的方法就ok了! 有两个方法:第一个是文本加图片显示的,第二个是纯文本显示的。 上代码。。。 public cl...

weixin_39654467的博客 9821

Android之十一Toast 自定义Toast的实现方法,及其说明

Android Toast 自定义Toast的实现方法,及其说明 Android Toast用于在手机屏幕上向用户显示一条信息,一段时间后信息会自动消失。信息可以是简单的文本,也可以是复杂的图片及其他内容(显示一个view)。  1.简单用法 Toast.makeText(midlet.getApplicationContext(), "用户名不能为空", Toast.LENGTH_LO

zhupengqq的博客 2662

Android开发之自定义Toast实现详解

Toast是Android平台中一种用于快速向用户反馈信息的轻量级UI组件。它不会获取焦点,也不会打断用户当前操作,通常用于展示短暂的提示信息,例如“保存成功”或“网络连接失败”。在Android开发中,Toast的使用非常广泛,尤其适用于不需要用户交互的场景。它通过静态方法快速创建,并通过show()方法显示在屏幕上。默认情况下,Toast会在指定位置短暂显示一段时间后自动消失。

weixin_30481539的博客 983

android自定义toast(widget开发)示例

1、Toast控件: 通过查看源代码,发现Toast里面实现的原理是通过服务Context.LAYOUT_INFLATER_SERVICE获取一个LayoutInflater布局管理器,从而获取一个View对象(TextView),设置内容将其显示 代码如下:public static Toast makeText(Context context, CharSequence text, int duration) {        Toast result = new Toast(context);         LayoutInflater inflate = (LayoutInflat

Android 自定义 Toast

前言 安卓原生Toast只提供了两种展示方式 即 Toast.LENGTH_LONG 或者Toast.LENGTH_SHORT ,但这远远满足不了产品经理的各种需求, 所以本文展示的就是一个可自定义位置及时间长短的Toast , 二、使用步骤 1.自定义布局 代码如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/

X_sunmmer的博客 2038

LabVIEW vs Python:谁更适合你的ATE自动化测试系统?实测对比与选型建议

本文深入对比了LabVIEW和Python在ATE自动化测试系统中的性能表现、开发效率和应用场景,帮助工程师根据实时控制需求、数据处理复杂度及团队技能做出最优选型决策。通过实测数据和典型案例,分析两者在硬件集成、系统性能和维护成本等方面的差异,并提供混合架构实施建议。

weixin_29240711的博客 275

android toast防重_安卓Toast自定义及防止重复显示

Toast是安卓系统中,用户误操作时或某功能执行完毕时,对用户的一种提示,它没有焦点,并在一定时间内会消失,但用户连续误操作(如登录时,密码错误)多次时,则会有多个Toast被创建,系统会把这些toast放进队列中,等待上个Toast 显示完毕,接着显示下一个,那么用户则会看到多次Toast提示,无论你退出软件与否,这样给用户的体验则大打折扣,所以我们需要做的是,若Toast已在显示(也就是Toa...

weixin_35308770的博客 756

实战经验:Sensor Bringup中那些坑我都帮你踩过了(避坑指南)

本文是一份详尽的Sensor Bringup实战避坑指南,总结了从I2C通信、MCLK时钟、电源管理到图像异常等关键环节的常见问题与排查方法。文章提供了系统化的调试工作流,强调先硬件后软件的排查原则,旨在帮助硬件工程师快速定位并解决Sensor启动过程中的难题,提升开发效率。

weixin_29212429的博客 574

基于STM32的智能台灯PWM调光与人体感应融合设计

本文详细介绍了基于STM32单片机的智能台灯设计方案,重点讲解了PWM调光技术与人体感应模块的融合实现。通过STM32的高级定时器产生精准PWM信号控制LED亮度,结合红外传感器实现人来灯亮、人走灯灭的智能体验,同时集成光敏传感实现环境自适应调光,打造高效节能的智能照明解决方案。

threejs5artist的博客 822

【Android终极方案】全版本通用!这款安卓Toast库仅3KB,完美实现Toast移除图标与自定义文本颜色,性能吊打传统库

NexToast是一款专为Android开发者设计的轻量级Toast库(仅3KB),解决了原生Toast在Android 12+强制显示图标、文本截断等问题。它提供三大核心功能:移除系统图标、获取文本控件实现深度自定义、全版本完美兼容(Android 5.0-14)。相比臃肿的第三方库,NexToast性能更优、集成更简单,支持一行代码替换原生Toast,是处理系统通知的最优解。 #Android开发 #Toast轻量库 #安卓Toast库 #Toast移除图标 #Toast获取文本控件 #toast自定义

qq_66458871的博客 1185

可调电源的电路设计

可调电源在电路调试中经常用到,可调电源分为两种2-5v(非0点可调)和0-5v(低至0点可调)可调两种。 对于第一种非0点电压的可调范围,其主要是由于开关电源或LDO芯片输出的最小电压为一个固定电压值,非0范围。因此通过调节开关电源或LDO端的反馈电阻的设计模型,其电压可调范围都与芯片的参考电压有关。 基于开关电源的可调电压设计电路 因芯片U2的输出参考电压VSENSE管脚为1.22v。因此,通过调节可调电阻R8的数值,其芯片输出的最低电压一定不小于1.22v。当然此种方案是手动可调输出电压的设计,如

weixin_42257266的博客 9729

安卓自定义Toast,调整Toast位置大小等的方法

安卓自带的 Toast 其实还是不错的,但是,不折腾一下怎么能显示出我们的与众不同呢。所以,让我们先看一下默认的 Toast 长什么样。 圆角,灰底白字,个人感觉还是不错的,都是一种形势,难免有些单调。 xml 文件如下:<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.and

fengyucoder的博客 6830

HDMI接口协议

接口HDMI(High-Definition Multimedia Interface),新一代多媒体接口标准。即高清多媒体接口。它能够同时传输视频和音频,简化了设备的接口和连线;同时提供了更高的数据传输带宽,可以传输无压缩的数字音频及高分辨率视频信号。HDMI 1.0 版本于 2002 年发布,最高数据传输速度为 5Gbps;而2017 年发布的 HDMI 2.1 标准的理论带宽可达 48Gbps。1、能够同时传输视频和音频,简化了设备接口与连线。2、提供了更高的数据传输带宽,

weixin_42581439的博客 2593

mongoDB 数据莫名其妙的没了

问题 之前没有接触过mongoDB,然后接手一个项目使用的是MongoDB,我就跟着网上的教程搭建一个MongoDB的服务,并运行起来。 一开始没有啥问题,成功的把服务与MongoDB都启动以来,运行也没有问题。但是过了几天,我再次打开时发现,以前的数据神奇的消失了。我还在想,是有什么定时清除的么,还是什么原因导致崩了然后数据就被清理了。 查找原因 第一次遇到我没有在意,重启了一下MongoDB,...

技术熊的博客小窝 1万+

安卓自定义Toast的原理及实现

本文简要介绍安卓自定义toast的原理及实现安卓本身自带的toast功能,简单易用,只要可以满足绝大多数的需求Toast.makeText(this, "This is a toast!", Toast.LENGTH_SHORT).show(); 若是有自定义toast的需求,可以用以下方法实现注意:本文没有实现自定义duration,因为如果设置为任意数值,将会被系统转换成Toast.LENGT...

航哈哈的博客 5906

人形机器人开源资源大盘点(四):硬件开源平台

开源人形机器人平台推动技术民主化 本期聚焦四大开源人形机器人平台:斯坦福的ToddlerBot以6000美元低成本实现30自由度运动,支持仿真到现实的零样本迁移;法国Reachy2被HuggingFace收购,融合开源AI与硬件,适配医疗、工业等场景;国内OriginMan基于ROS2全开源,集成大模型能力,支持深度改造;OAN框架则为经典NAO机器人注入开源活力,扩展交互功能。这些平台通过不同路径降低研发门槛,推动人形机器人技术走向开放共享的未来。

Studying…… 370

Android Toast进阶——自定义Toast

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 离线写博客 导入导出Markdown文件 丰富的快捷键 快捷键 加粗 Ctrl B 斜体 Ctrl I 引用 Ctrl

小一的专栏 4133

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

android toast居中显示_android Toast 弹出在屏幕中间位置以及自定义Toast

Toast 我想我们应该使用的都很多,一般我们使用默认设置较多,但是默认设置往往不能满足我们的需求,那我们现在来自定义下:默认Toast:Toast.makeText(MainActivity.this,"点击按钮",Toast.LENGTH_SHORT).show();设置Toast位置:通过setGravity设置Toast位置,可以是Gravity.CENTER:中间Gravity.BOTT...

weixin_39719476的博客 2828

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

安卓自定义Toast

安卓自定义Toast我们在开发安卓应用的过程中时常会使用到Toast给用户展示一些提示信息。但是安卓默认的Toast不是很美观,且在不同版本,不同品牌的设备上展现出的效果也不一致。举个例子: 下图是安卓默认的Toast在API 16 (安卓4.1)上的实现效果: 下图是安卓默认的Toast在API 25 (安卓7.1)上的实现效果: 同一个Toast在不同设备上的显示效果不一致。为了解决安

自古文人黑客梦 736

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

android toast设置布局,Android 自定义布局的Toast

项目开发经常用到自定义布局的Toast,写一个Toast工具类需要用的地方直接调用showTextpublic class KdToast extends Toast {private static KdToast toast;public KdToast(Context context) {super(context);}public static void showText(Context c...

weixin_36166342的博客 497
上一篇: Android平台版本-API级别与版本号对照表
下一篇: 封装一个在小项目中使用的volley(通俗简便、方便灵活)
github_2011
博客等级 码龄10年 116粉丝 56原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值