ToastCustom
工具类
/**
* 自定义Toast
*/
public class ToastCustom {
private boolean canceled = true;
private Handler handler;
private Toast toast;
private TimeCount time;
private TextView toast_content;
private static ToastCustom instance;
public static ToastCustom getInstance(Context context) {
if(instance == null) {
instance = new ToastCustom(context);
}
return instance;
}
public ToastCustom(Context context) {
this(context, new Handler());
}
public ToastCustom(Context context, Handler handler) {
this.handler = handler;
View layout = LayoutInflater.from(context).inflate(R.layout.toast_layout, null, false);
toast_content = (TextView) layout.findViewById(R.id.toast_tv);
if (toast == null) {
toast = new Toast(context);
}
toast.setGravity(Gravity.CENTER, 0, 0);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
}
/**
* @param text 要显示的内容
* @param duration 显示的时间长
* 根据LENGTH_MAX进行判断
* 如果不匹配,进行系统显示
* 如果匹配,永久显示,直到调用hide()
*/
public void show(String text, int duration) {
time = new TimeCount(duration, 1000);//1000是消失渐变时间
toast_content.setText(text);
if (canceled) {
time.start();
canceled = false;
showUntilCancel();
}
}
/**
* 隐藏Toast
*/
public void hide() {
if (toast != null) {
toast.cancel();
}
canceled = true;
}
private void showUntilCancel() {
if (canceled) {
return;
}
toast.show();
handler.postDelayed(new Runnable() {
public void run() {
showUntilCancel();
}
}, 3000);
}
/**
* 计时器
*/
class TimeCount extends CountDownTimer {
public TimeCount(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval); // 总时长,计时的时间间隔
}
@Override
public void onFinish() { // 计时完毕时触发
hide();
}
@Override
public void onTick(long millisUntilFinished) { // 计时过程显示
}
}
}
toast_layout.xml
自定义样式
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="280dp"
android:layout_height="32dp"
android:orientation="horizontal"
android:background="@drawable/toast_bg"
android:layout_centerHorizontal="true"
android:gravity="center">
<ImageView
android:id="@+id/toast_iv"
android:layout_width="14dp"
android:layout_height="14dp"
android:src="@mipmap/toast_yes"/>
<TextView
android:id="@+id/toast_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="这是一条消息"
android:textSize="13sp"
android:textColor="@color/white"
android:layout_marginStart="6dp"/>
</LinearLayout>
</RelativeLayout>
@drawable/toast_bg
这是Toast 的背景(带圆角)
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color = "#FF3D3D3D" />
<corners
android:radius="3dp"/>
</shape>
@mipmap/toast_yes?
这是一张图片 , 根据设计图来添加
如何使用
ToastCustom.getInstance(MainActivity.this).show("这是一条消息", 1000);
|