欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > > 内容正文

[Android]可自定义显示时长的Toast,androidtoast

来源: 开发者 投稿于  被查看 46990 次 评论:4

[Android]可自定义显示时长的Toast,androidtoast


<无详细内容>

1.[Java]代码

package lab.sodino.customtoast;
import lab.sodino.util.SodinoOut;
import android.content.Context;
import android.os.Handler;
import android.widget.Toast;
/**设计原理:在Toast显示消失之前,再次调用Toast.show()进行接力。*/
public class CustomToast {
	/** 用于测试 */
	private int showCount = 1;
	private Toast toast = null;
	private Context context;
	private Handler handler = null;
	private Runnable toastThread = new Runnable() {
		public void run() {
			// 递增的count明显地表明是不断运行新的Toast.show()的结果。
			toast.setText(String.valueOf(showCount++) + "CustomToast");
			toast.show();
			// 3.3秒后再度重启,设为4s的话将会看到Toast是断断续续地显示着的。
			handler.postDelayed(toastThread, 3300);
		}
	};
	public CustomToast(Context context) {
		this.context = context;
		handler = new Handler(this.context.getMainLooper());
		toast = Toast.makeText(this.context, "", Toast.LENGTH_LONG);
	}
	public void setText(String text) {
		toast.setText(text);
	}
	public void showToast(final long length) {
		handler.post(toastThread);
		SodinoOut.out("Handler post at:" + System.currentTimeMillis());
		Thread timeThread = new Thread() {
			public void run() {
				SodinoOut.out("TimeThread start at:"
						+ System.currentTimeMillis());
				try {
					Thread.sleep(length);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				CustomToast.this.stopToast();
				SodinoOut
						.out("Toast canceled at:" + System.currentTimeMillis());
			}
		};
		timeThread.start();
	}
	public void stopToast() {
		// 删除Handler队列中的仍处理等待的消息元素删除
		handler.removeCallbacks(toastThread);
		// 撤掉仍在显示的Toast
		toast.cancel();
	}
}

用户评论