欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android 彩色Toast实现

程序员文章站 2022-07-01 20:50:31
Android默认的Toast太丑了,我们来封装一个花里胡哨的Toast吧,就叫ColoredToast。 Github:https://github.com/imcloudfloating/DesignApp 效果: Toast有一个setView方法,通过它我们可以设置自定义的布局,这里我只是加 ......

android默认的toast太丑了,我们来封装一个花里胡哨的toast吧,就叫coloredtoast。

github:https://github.com/imcloudfloating/designapp

效果:

Android 彩色Toast实现

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

布局文件:一个framelayout和显示消息的textview

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <framelayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:tools="http://schemas.android.com/tools"
 4     android:layout_width="wrap_content"
 5     android:layout_height="wrap_content">
 6 
 7     <textview
 8         android:id="@+id/toast_message"
 9         android:layout_width="wrap_content"
10         android:layout_height="48dp"
11         android:paddingstart="32dp"
12         android:paddingend="32dp"
13         android:gravity="center"
14         android:textsize="18sp"
15         tools:text="this is a toast message" />
16 
17 </framelayout>

2.java代码:

用layoutinflater来加载布局,然后用setview将布局设置为toast的根view,通过自定义方法来设置toast的消息和背景色,这里背景色是给textview设置的,假如你想加上图标和其它元素,通过findviewbyid来设置即可。

 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_long
19     })
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 id
42          */
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 position
54          * @see android.view.gravity
55          */
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打造完成!