一般自己写代码测试的时候都会直接Toast.makeText(context, text, duration);
但是可能在一个比较大的项目一般不会这样做。
UiHelper.java
package com.example.ui;
import com.example.jpush.MyApp;
import com.example.jpush.R;
import android.view.Gravity;
import android.widget.TextView;
import android.widget.Toast;
public class UiHelper {
public static void showToast(String msg) {
showToast(msg, 0);
}
public static void showToast(String msg, int drawableResId) {
TextView textView = new TextView(MyApp.getContext());// 直接获得app的context,MyApp为自己编写继承Application的类
textView.setBackgroundResource(R.drawable.toast);
textView.setPadding(24, 24, 24, 24);// 挤开一下空间
textView.setGravity(Gravity.CENTER);
textView.setText(msg);
if (drawableResId != 0) {
textView.setCompoundDrawablePadding(20);//
textView.setCompoundDrawablesWithIntrinsicBounds(drawableResId, 0,0, 0);//往TextView添加图片
}
Toast toast = new Toast(MyApp.getContext());
toast.setDuration(Toast.LENGTH_LONG);
// toast.setText(msg);//传入String类型会崩溃
toast.setView(textView);
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);// 设置toast的位置
toast.show();
}
}
toast.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android"><!-- 形状 -->
<corners android:radius="8dip"/><!-- 角 -->
<solid android:color="#e0333333"/><!-- 背景,固体 -->
</shape>
<!-- 就是一个圆角效果 -->
MainActivity.java
...
//用下面方式直接调用
UiHelper.showToast("自定义Toast");
//Or
UiHelper.showToast("自定义Toast",R.draw.ok);//带图案
...
效果:
update 2016/12/ 7
package cn.flyrise.android.shared.utility;
import android.graphics.Color;
import android.os.Handler;
import android.view.Gravity;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
import cn.flyrise.fggp.FEApplication;
import cn.flyrise.fggp.FEUtil;
import cn.flyrise.fggp.R;
/**
* author yj
*/
public class FEToast {
private static List<MessageToast> toastList = new ArrayList<MessageToast>();
// 在duration时间内能同时放入多少条toast
private static int maxToast = 5;
public static void showMessage(CharSequence msg) {
if (toastList.size() == 0) {
init();
}
boolean canEnqueue = false;
for (int i = 0; i < maxToast; i++) {
final MessageToast messageToast = toastList.get(i);
if (!messageToast.isEnqueue()) {
canEnqueue = true;
messageToast.setEnqueue(true);
messageToast.setToastMessage(msg);
if (i == 0) {
handleCancel(messageToast, i);
}
messageToast.getToast().show();
break;
}
}
if (!canEnqueue) {
hideAllMessage();
showMessage(msg);
}
}
private static void handleCancel(final MessageToast messageToast, final int i) {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
messageToast.getToast().cancel();
messageToast.setEnqueue(false);
int nextToast = i + 1 >= maxToast ? 0 : i + 1;
if (toastList.get(nextToast).isEnqueue()) {
handleCancel(toastList.get(nextToast), nextToast);
}
}
}, messageToast.getDuration());
}
public static void hideAllMessage() {
for (int i = 0; i < maxToast; i++) {
final MessageToast messageToast = toastList.get(i);
if (messageToast.isEnqueue()) {
messageToast.getToast().cancel();
}
}
}
public static void init() {
for (int i = 0; i < maxToast; i++) {
toastList.add(new MessageToast());
}
}
static class MessageToast {
private boolean isEnqueue;
private Toast toast;
// 不能大于3500!
private int duration = 1000;
public Toast getToast() {
return toast;
}
public boolean isEnqueue() {
return isEnqueue;
}
public void setEnqueue(boolean enqueue) {
isEnqueue = enqueue;
}
public MessageToast() {
TextView textView = new TextView(FEApplication.getContext());
textView.setBackgroundResource(R.drawable.toast);
textView.setPadding(24, 24, 24, 24);// 挤开一下空间
textView.setGravity(Gravity.CENTER);
textView.setTextColor(Color.WHITE);
textView.setTextSize(17);
toast = new Toast(FEApplication.getContext());
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(textView);
toast.setGravity(Gravity.BOTTOM, 0, FEUtil.dipToPx(90));// 设置toast的位置
}
public void setToastMessage(CharSequence message) {
((TextView) toast.getView()).setText(message);
}
public int getDuration() {
return duration;
}
}
}