hook Toast,全网最强之 Android “沙雕”操作

在小米部分机型上,Toast会显示应用名。为统一风格,文章介绍了通过Hook Toast实现移除前缀的方法。分析了Toast的构造与展示过程,利用反射和动态代理在不改变原有逻辑的情况下,修改Toast内容的展示。最后展示了实现代码和效果。
摘要由CSDN通过智能技术生成

一,背景

这是个沙雕操作,原因是:在小米手机的部分机型上,弹Toast时会在吐司内容前面带上app名称,如下:

此时产品经理发话了:为了统一风格,在小米手机上去掉Toast前的应用名。

网上有以下解决方案,比如:先给toastmessage设置为空,然后再设置需要提示的message,如下:

Toast toast = Toast.makeText(context, “”, Toast.LENGTH_LONG);
toast.setText(message);
toast.show();

但这些都不能从根本上解决问题,于是Hook Toast的方案诞生了。

二,分析

首先分析一下Toast的创建过程.

Toast的简单使用如下:

Toast.makeText(this,"abc",Toast.LENGTH_LONG).show();

1,构造toast

通过makeText()构造一个Toast,具体代码如下:

public static Toast makeText(@NonNull Context context, @Nullable Looper looper,
        @NonNull CharSequence text, @Duration int duration) {
    if (Compatibility.isChangeEnabled(CHANGE_TEXT_TOASTS_IN_THE_SYSTEM)) {
        Toast result = new Toast(context, looper);
        result.mText = text;
        result.mDuration = duration;
        return result;
    } else {
        Toast result = new Toast(context, looper);
        View v = ToastPresenter.getTextToastView(context, text);
        result.mNextView = v;
        result.mDuration = duration;

        return result;
  
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值