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; } } }
新聞熱點
疑難解答