简单实现不一样的炫酷Toast

本文介绍了一种在Android应用中实现个性化且炫酷Toast提示的方法,解决了默认Toast存在的重复显示及样式不统一等问题。

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

UI妹子总是有各种炫酷的创意想法。如果UI妹子拿着一个UI效果问你。

妹子:“这个效果能不能实现?”

你:“这个实现不了”。

那岂不是很尴尬?最可怕的是

妹子:“这个效果能不能实现?”

你:“这个实现不了”。

妹子:“那iOS那边怎么能实现?”

你:“......”


所以,作为男人,该硬的时候就要硬起来。炫酷的效果没有什么是不能实现的。

要做到你有一天听到妹子质问iOS。

妹子:“那安卓那边怎么能实现?”

iOS:“......"


好 ,言归正传。我们今天来看一下如何简单实现炫酷的Toast效果。


Toast大家都经常用,非常的简单。但是不知道大家发现一个小问题没有,安卓自带的Toast有一点点小缺陷。

第一、假设我们点击一个按钮就弹出一个吐司,当我们重复点击按钮调用Toast的时候,Toast会重复创建,所以要过好久Toast才会消失。

第二、由于国内安卓环境的特殊性,几乎每一个厂商都有他自己的Toast样式。显示在下方的,显示在中间的都有,各种长相也是千奇百怪。


当然,如果你不是一个完美主义者,那就忍了。但是,对于像我这样的完美主义者,这怎么能忍?那我们今天就来着手解决这个问题。


说一千道一万不如上代码来得直接。走你。


首先,我们需要在drawable文件夹下创建一下我们吐司的外观长相,怎么创建呢?当然是用shape啦。


1、在drawable文件夹下创建shape_toast.xml文件

<?xml version="1.0" encoding="utf-8"?>
<shape android:shape="rectangle"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@color/colorPrimary" />
    <corners android:radius="5dp" />
</shape>


我们的shape非常的简单,用主颜色作为填充,外面有一点点的小圆角。


接下来我们就需要引用我们刚创建的外观长相


2、在layout文件夹下创建 layout_toast.xml文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <TextView
        android:id="@+id/textView_toast"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="14sp"
        android:padding="5dp"
        android:background="@drawable/selector_login_button"
        android:textColor="@color/colorWhite" />
</LinearLayout>


同样也是非常的简单,重点就是TextView 的background要设置好。


接下来我们在java代码中引用我们的布局文件


3、在java文件夹下创建GorgeousToast.java文件,同样的,直接上代码。


public class GorgeousToast {
    private Toast toast;
    private Context context;
    private String message;

    public GorgeousToast(Context context) {
        this.context = context;
    }

    public GorgeousToast(Context context, String message){
        this.context = context;
        this.message = message;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public void show(){
        if(toast == null){
            toast = new Toast(context);
        }
        toast.setDuration(Toast.LENGTH_SHORT);
        toast.setGravity(Gravity.BOTTOM|Gravity.CENTER, 0, DisplayUtils.dp2px(context,60));
        LayoutInflater inflater = LayoutInflater.from(context);
        LinearLayout toastLayout = (LinearLayout)inflater.inflate(R.layout.layout_toast, null);
        TextView textToast = (TextView)toastLayout.findViewById(R.id.textView_toast);
        textToast.setText(message);
        toast.setView(toastLayout);
        toast.show();
    }
}

这里也非常的简单,我们还是照顾一下新手同学,解释一下。

我们创建一个了GorgeousToast.java文件,写了一下他的构造方法。一种是通过传上下文对象然后通过setMessage()方法设置消息内容,一种直接在构造方法里面设置消息内容。然后我们的show()方法主要就是展示Toast啦。首先设置Duration也就是时长为短时长,然后设置位置为底部居中并且距离底部60dp的位置。然后引用我们刚创建好的Toast布局文件,最后将Toast显示出来。

到这里基本的效果就实现了。

上面有个DisplayUtils.java,我也给大家发出来。


DisplayUtils.java

public class DisplayUtils {
    public static int dp2px(Context context, float dpValue) {
        float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }
}

上面我为什么说基本实现了呢?确实Toast的样式问题是解决了,但是TM的好像还是有重复创建的问题啊。

冷静、冷静。


我们在java文件中继续创建一个ToastUtils.java


public class ToastUtils {
    public static GorgeousToast gorgeousToast;
    public static void showToast(Context context,String content){
        if(gorgeousToast==null){
            gorgeousToast = new GorgeousToast(context);
        }
        gorgeousToast.setMessage(content);
        gorgeousToast.show();
    }
}


每当我么需要展示我们自定义样式的Toast的时候,只需要ToastUtils.showToast();就可以啦,是不是非常的简单。

今天简单实现不一样炫酷Toast的文章就到这里,拜了个拜!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值