Android Toast的时长

本文解答了实习生关于Android Toast时长设置的疑问,揭示了Toast.LENGTH_LONG实际为3500ms,Toast.LENGTH_SHORT为2000ms,非这两个值将采用SHORT延迟。通过源码分析,确定了Toast时间的固定规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

结论:Android Toast的时长 

Toast.LENGTH_LONG  3500ms
Toast.LENGTH_SHORT 2000ms

 

今天公司一实习生问我Toast的时间,我说Long 3500ms,Short 2000ms

他问:Toast不是提供了setDuration(@Duration int duration) 方法吗?那么Toast的时间是不是可以任意设置?如果他设置的值既不是Long 也不是Short,那么Toast的时间是多少了?

找一下源码,解决一下他的疑问。

 

查看源码:Android Code Search ( https://cs.android.com/android ) 这个查看源码的工具是google  2019-12-18 发布的,必须给一个赞!

一顿搜索下来,找到了 NotificationManagerService.java 

@GuardedBy("mToastQueue")
    private void scheduleDurationReachedLocked(ToastRecord r)
    {
        mHandler.removeCallbacksAndMessages(r);
        Message m = Message.obtain(mHandler, MESSAGE_DURATION_REACHED, r);
        int delay = r.getDuration() == Toast.LENGTH_LONG ? LONG_DELAY : SHORT_DELAY;
        // Accessibility users may need longer timeout duration. This api compares original delay
        // with user's preference and return longer one. It returns original delay if there's no
        // preference.
        delay = mAccessibilityManager.getRecommendedTimeoutMillis(delay,
                AccessibilityManager.FLAG_CONTENT_TEXT);
        mHandler.sendMessageDelayed(m, delay);
    }

 

这里如果传入的duration 不是 Toast.LENGTH_LONG,就统统为 Toast.LENGTH_SHORT。

那么Long 和 Short的值究竟是多少?

在  NotificationManagerService.java 

static final int LONG_DELAY = PhoneWindowManager.TOAST_WINDOW_TIMEOUT;

static final int SHORT_DELAY = 2000; // 2 seconds

 

在 PhoneWindowManager.java 

/** Amount of time (in milliseconds) a toast window can be shown. */

public static final int TOAST_WINDOW_TIMEOUT = 3500; // 3.5 seconds

 

到此,问题已经有了答案:

Toast.LENGTH_LONG  3500ms
Toast.LENGTH_SHORT 2000ms

如果他设置的值既不是Long 也不是Short,那么Toast的时间就是 SHORT(2000ms).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PJ佩恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值