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
效果:
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; } } }
上一篇: 45W超级快充加持 官方预告小米第二款5G旗舰即将登场
下一篇: 华为红米抢着做 电视又成了香饽饽