Android Toast进阶——自定义Toast

本文介绍了如何通过深入理解Toast源码,实现自定义Toast以控制显示时间和修改动画效果。首先,通过分析源码,了解到Toast显示时间由Handler延迟消息决定,进而提出自定义Toast的方法,以实现任意显示时间控制。其次,由于Android原生Toast不支持自定义动画,作者展示了如何创建新的style和动画文件,然后在自定义Toast中应用这些动画,实现个性化动画效果。
摘要由CSDN通过智能技术生成

目录结构


前言

CSDN竟然支持Markdown语法了,对我这种懒得自己搭建博客的人确实是好消息,再复习Markdown语法的同时,我准备把之前写的一篇Android Toast进阶用Markdown语法重写一遍。


进阶目标

上一篇博客我们学习了Toast的源码,了解了Toast从显示到消失的全过程,学习链接:Android Toast源码分析。俗话说的好,学以致用。我们学习Toast源码不是用来炫技的,而是用来了解Toast原理,从而真正解决我们问题的。下面我就提两个业务中可能遇到的跟Toast相关的真实问题,看看学习了Toast源码之后,该如何解决这些问题。两个问题是:
1. 如何自定义Toast的显示时间。
2. 如何修改Toast的出现动画。
接下来,我们分别讲解阅读了Toast源码之后,如何解决这两个业务中真实遇到的问题。


控制Toast显示时间

通过对Toast源码的学习,我们知道Toast的显示和消失是NotificationManagerService调用TN类的show和hide方法实现的,而Toast的显示时间的长短则跟Handler发送消息的延迟时间相关。具体源码如下:

private void scheduleTimeoutLocked(ToastRecord r)
{
    mHandler.removeCallbacksAndMessages(r);
    Message m = Message.obtain(mHandler, MESSAGE_TIMEOUT, r);
    long delay = r.duration == Toast.LENGTH_LONG ? LONG_DELAY : SHORT_DELAY;
    mHandler.sendMessageDelayed(m, delay);
}

之前Toast源码里也讲过,为什么Toast的桌面显示时间只能是2s和3.5s,关键就是在于long delay变量的延迟时间只能是2s和3.5s。因此,如果你是Android操作系统的开发人员,你可以直接修改Android Framework层的NotificationManagerService类代码,将LONG_DELAY和SHORT_DELAY改成你想要的时间间隔。但是,这种做法的弊端很明显。首先,你可能只是一个小小的应用层开发工程师,只能改动应用层代码。其次,就算修改NotificationManagerService,也只能改动LONG_DELAY和SHORT_DELAY两个变量,无法做到随意修改显示时间。
弊端这么多,那我们应用层开发工程师该怎么办呢?答案也很简单,仿照Toast源码,我们自己造个轮子,自定义一个Toast,这样我们肯定就可以控制Toast的显示时间了。通过源码我们知道,Toast是基于WindowManager来显示的,那我们完全可以撸一个自定义Toast出来,源码如下:

import android.content.Context;
import android.graphics.PixelFormat;
import android.os.Handler;
import android.os.Message;
import android.view.Gravity;
import android.view.View;
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值