博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 彩色Toast实现
阅读量:4360 次
发布时间:2019-06-07

本文共 3122 字,大约阅读时间需要 10 分钟。

Android默认的Toast太丑了,我们来封装一个花里胡哨的Toast吧,就叫ColoredToast。

Github:

效果:

Toast有一个setView方法,通过它我们可以设置自定义的布局,这里我只是加入了改变背景色,如果你有其它需求,比如加上图标也是可以的。

布局文件:一个FrameLayout和显示消息的TextView

1 
2
6 7
16 17

2.Java代码:

用LayoutInflater来加载布局,然后用setView将布局设置为Toast的根View,通过自定义方法来设置Toast的消息和背景色,这里背景色是给TextView设置的,假如你想加上图标和其它元素,通过findViewById来设置即可。

这里我用的是GradientDrawable来作为Toast的背景,setColor方法背景色,setCornerRadius设置圆角半径,最后将他作为TextView的背景就可以了。如果你不想用它,也可以直接使用xml文件来作为背景,不过这样就不方便灵活设置颜色了。

1 package com.cloud.customviews; 2  3 import android.content.Context; 4 import android.graphics.drawable.GradientDrawable; 5 import android.support.annotation.ColorRes; 6 import android.support.annotation.IntDef; 7 import android.support.annotation.NonNull; 8 import android.support.annotation.StringRes; 9 import android.view.LayoutInflater;10 import android.view.View;11 import android.widget.TextView;12 import android.widget.Toast;13 14 public class ColoredToast extends Toast {15 16     @IntDef(value = {17             LENGTH_SHORT,18             LENGTH_LONG19     })20     @interface Duration {}21 22     private ColoredToast(Context context) {23         super(context);24     }25 26     public static class Maker {27 28         private Context mContext;29         private ColoredToast mToast;30         private View mToastView;31         private TextView mTextMessage;32 33         public Maker(Context context) {34             mContext = context;35             mToast = new ColoredToast(context);36             mToastView = LayoutInflater.from(context).inflate(R.layout.toast_colored, null);37             mTextMessage = mToastView.findViewById(R.id.toast_message);38         }39 40         /**41          * Set text color and background color for toast by resource id42          */43         public Maker setColor(@ColorRes int textColor, @ColorRes int backgroundColor) {44             GradientDrawable drawable = new GradientDrawable();45             drawable.setColor(mContext.getColor(backgroundColor));46             drawable.setCornerRadius(mTextMessage.getLayoutParams().height / 2);47             mToastView.setBackground(drawable);48             mTextMessage.setTextColor(mContext.getColor(textColor));49             return this;50         }51 52         /**53          * Set position54          * @see android.view.Gravity55          */56         public Maker setGravity(int gravity, int xOffset, int yOffset) {57             mToast.setGravity(gravity, xOffset, yOffset);58             return this;59         }60 61         public ColoredToast makeToast(@StringRes int resId, @Duration int duration) {62             mTextMessage.setText(resId);63             mToast.setView(mToastView);64             mToast.setDuration(duration);65             return mToast;66         }67 68         public ColoredToast makeToast(@NonNull String text, @Duration int duration) {69             mTextMessage.setText(text);70             mToast.setView(mToastView);71             mToast.setDuration(duration);72             return mToast;73         }74     }75 }

花里胡哨的Toast打造完成!

转载于:https://www.cnblogs.com/cloudfloating/p/9845482.html

你可能感兴趣的文章
HDFS的设计
查看>>
如何实现一个php框架系列文章【开篇】
查看>>
APIClude常用代码
查看>>
Nginx wordpress rewrite
查看>>
java工具类--数据库操作封装类
查看>>
对PInvoke函数函数调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。...
查看>>
面向对象之多态的三种方式
查看>>
1:(0or1)
查看>>
最大子数组和(环状数组)
查看>>
Python脚本报错AttributeError: ‘module’ object has no attribute’xxx’解决方法
查看>>
sqlserver数据库索引
查看>>
pytorch 官方文档翻译
查看>>
秒杀多线程第三篇 原子操作 Interlocked系列函数
查看>>
boost之ThreadPool
查看>>
如何打造测试工程师精英团队?
查看>>
Linux(CentOS)下同时启动两个tomcat
查看>>
从B树、B+树、B*树谈到R 树
查看>>
java 转换流 打印流 数据流
查看>>
你知道如何判定一个大整数为素数吗?——米勒拉宾素数判定算法
查看>>
form 元素横向排列
查看>>