如何去自定义一个Toast?

xiaoxiao2021-02-28  72

考虑如下:

一、视图,

二、需要调用的方法

package com.bw.aday05toast; import android.content.Context; import android.os.CountDownTimer; import android.os.Handler; import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.widget.TextView; import android.widget.Toast; public class ToastUtil {         private Toast mToast;         private TextView mTextView;         private TimeCount timeCount;         private String message;         private Handler mHandler = new Handler();         private boolean canceled = true;         public ToastUtil(Context context, int layoutId, String msg) {             message = msg;             LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);             //自定义布局             View view = inflater.inflate(layoutId, null);             //自定义toast文本             mTextView = (TextView)view.findViewById(R.id.toast_msg);             mTextView.setText(msg);             Log.i("ToastUtil", "Toast start...");             if (mToast == null) {                 mToast = new Toast(context);                 Log.i("ToastUtil", "Toast create...");             }             //设置toast居中显示             mToast.setGravity(Gravity.CENTER, 0, 0);             mToast.setDuration(Toast.LENGTH_LONG);             mToast.setView(view);         }         /**          * 自定义居中显示toast          */         public void show() {             mToast.show();             Log.i("ToastUtil", "Toast show...");         }         /**          * 自定义时长、居中显示toast          * @param duration          */         public void show(int duration) {             timeCount = new TimeCount(duration, 1000);             Log.i("ToastUtil", "Toast show...");             if (canceled) {                 timeCount.start();                 canceled = false;                 showUntilCancel();             }         }         /**          * 隐藏toast          */         private void hide() {             if (mToast != null) {                 mToast.cancel();             }             canceled = true;             Log.i("ToastUtil", "Toast that customed duration hide...");         }         private void showUntilCancel() {             if (canceled) { //如果已经取消显示,就直接return                 return;             }             mToast.show();             mHandler.postDelayed(new Runnable() {                 @Override                 public void run() {                     Log.i("ToastUtil", "Toast showUntilCancel...");                     showUntilCancel();                 }             }, Toast.LENGTH_LONG);         }         /**          *  自定义计时器          */         private class TimeCount extends CountDownTimer {             public TimeCount(long millisInFuture, long countDownInterval) {                 super(millisInFuture, countDownInterval); //millisInFuture总计时长,countDownInterval时间间隔(一般为1000ms)             }             @Override             public void onTick(long millisUntilFinished) {                 mTextView.setText(message + ": " + millisUntilFinished / 1000 + "s后消失");             }             @Override             public void onFinish() {                 hide();             }         }      }

转载请注明原文地址: https://www.6miu.com/read-58418.html

最新回复(0)