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

Android 彩色Toast的实现代码

程序员文章站 2023-09-04 14:01:55
android默认的toast太丑了,我们来封装一个花里胡哨的toast吧,就叫coloredtoast。 github:https://github.com/imclo...

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

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

效果:

Android 彩色Toast的实现代码

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

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

<?xml version="." encoding="utf-"?>
 <framelayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content">
   <textview
     android:id="@+id/toast_message"
     android:layout_width="wrap_content"
     android:layout_height="dp"
     android:paddingstart="dp"
     android:paddingend="dp"
     android:gravity="center"
     android:textsize="sp"
     tools:text="this is a toast message" />
 </framelayout>

2.java代码:

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

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

 package com.cloud.customviews;
 import android.content.context;
 import android.graphics.drawable.gradientdrawable;
 import android.support.annotation.colorres;
 import android.support.annotation.intdef;
 import android.support.annotation.nonnull;
 import android.support.annotation.stringres;
 import android.view.layoutinflater;
 import android.view.view;
 import android.widget.textview;
 import android.widget.toast;
 public class coloredtoast extends toast {
   @intdef(value = {
       length_short,
       length_long
   })
   @interface duration {}
   private coloredtoast(context context) {
     super(context);
   }
   public static class maker {
     private context mcontext;
     private coloredtoast mtoast;
     private view mtoastview;
     private textview mtextmessage;
     public maker(context context) {
       mcontext = context;
       mtoast = new coloredtoast(context);
       mtoastview = layoutinflater.from(context).inflate(r.layout.toast_colored, null);
       mtextmessage = mtoastview.findviewbyid(r.id.toast_message);
     }
     /**
     * set text color and background color for toast by resource id
     */
     public maker setcolor(@colorres int textcolor, @colorres int backgroundcolor) {
       gradientdrawable drawable = new gradientdrawable();
       drawable.setcolor(mcontext.getcolor(backgroundcolor));
       drawable.setcornerradius(mtextmessage.getlayoutparams().height / );
       mtoastview.setbackground(drawable);
       mtextmessage.settextcolor(mcontext.getcolor(textcolor));
       return this;
     }
     /**
     * set position
     * @see android.view.gravity
     */
     public maker setgravity(int gravity, int xoffset, int yoffset) {
       mtoast.setgravity(gravity, xoffset, yoffset);
       return this;
     }
     public coloredtoast maketoast(@stringres int resid, @duration int duration) {
       mtextmessage.settext(resid);
       mtoast.setview(mtoastview);
       mtoast.setduration(duration);
       return mtoast;
     }
     public coloredtoast maketoast(@nonnull string text, @duration int duration) {
       mtextmessage.settext(text);
       mtoast.setview(mtoastview);
       mtoast.setduration(duration);
       return mtoast;
     }
   }
 }