安卓Toast自定义及防止重复显示

Toast是安卓系统中,用户误操作时或某功能执行完毕时,对用户的一种提示,它没有焦点,并在一定时间内会消失,但用户连续误操作(如登录时,密码错误)多次时,则会有多个Toast被创建,系统会把这些toast放进队列中,等待上个Toast 显示完毕,接着显示下一个,那么用户则会看到多次Toast提示,无论你退出软件与否,这样给用户的体验则大打折扣,所以我们需要做的是,若Toast已在显示(也就是Toast!=null)时,就不用再重新new了,直接setText要显示的信息即可,只有Toast为空时,才重新new,分析到这里,大家应该明白怎么去写了吧。第二个问题是,为了使Toast能跟我们自己的应用风格搭配,常常需要我们自定义Toast显示,接下来,我们就来解决这两个问题:

既然为自定义,则常常会有个自定义布局,并加入自定义背景——custom_toast.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="35dp"
    android:background="@drawable/toast_bg"
    android:padding="10dp" >

    <TextView
        android:id="@+id/toast_message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:gravity="center"
        android:maxLines="2"
       android:textColor="@color/text"
        android:textSize="14sp"
        android:paddingLeft="2dp"
        android:paddingRight="2dp"
        android:text="网络连接失败"/>

</RelativeLayout>

接下来看主代码:

import android.content.Context;
import android.os.Handler;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

/**
 *
 * @author byl
 */
public class ToastUtil {

	private static Toast mToast;

	   private static Handler mHandler = new Handler();
	    private static Runnable r = new Runnable() {
	        public void run() {
	            mToast.cancel();
	            mToast=null;//toast隐藏后,将其置为null
	        }
	    };

	public static void showShortToast(Context context, String message) {
		LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		View view = inflater.inflate(R.layout.custom_toast, null);//自定义布局
		TextView text = (TextView) view.findViewById(R.id.toast_message);//显示的提示文字
		text.setText(message);
		mHandler.removeCallbacks(r);
        if (mToast == null){//只有mToast==null时才重新创建,否则只需更改提示文字
        	mToast = new Toast(context);
    		mToast.setDuration(Toast.LENGTH_SHORT);
    		mToast.setGravity(Gravity.BOTTOM, 0, 150);
    		mToast.setView(view);
        }
        mHandler.postDelayed(r, 1000);//延迟1秒隐藏toast
		mToast.show();
}
}

使用时,直接调用showShortToast()方法即可,如:ToastUtil.showShortToast(this,"密码不能为空"),

效果会是这样的:

安卓Toast自定义及防止重复显示

时间: 2025-01-08 10:51:05

安卓Toast自定义及防止重复显示的相关文章

Android Toast 重复显示问题

做程序员的,基本一看api就知道,用这个可以取消上一个toast的显示,然后显示下一个,这样就能解决出现的问题.可是在测试的过程中,发现却没有想象中的那么简单,不信可以百度一下,很多很多人发现toast的cancel()方法不起作用.还是不讲具体过程,只讲结果吧. 我把toast做成了一个应用类,方便使用,大家可以直接用: [java] view plaincopy public class ToastUtil { private static Handler handler = new Han

android源码分析 android toast使用详解 toast自定义

在安卓开发过程中,toast使我们经常使用的一个类,当我们需要向用户传达一些信息,但是不需要和用户交互时,该方式就是一种十分恰当的途径. 我们习惯了这样使用toast:Toast.makeText(Context context, String info, int duration).show();该方法是 系统为我们提供的一个方便的创建toast对象的静态方法,其内部依然是调用toast的相关方法完成.下面 就从其源码对该类的实现做一个分析 在toast类中,最重要的用于显示该toast的sh

Toast 自定义布局 完成图片上传提示

功能实现 : Activiyt : package com.lvche.lvchedingdang.activity.api_calling; import android.app.Activity; import android.app.AlertDialog; import android.content.ContentValues; import android.content.DialogInterface; import android.content.Intent; import a

Android之十一Toast 自定义Toast的实现方法,及其说明

Android Toast 自定义Toast的实现方法,及其说明 Android Toast用于在手机屏幕上向用户显示一条信息,一段时间后信息会自动消失.信息可以是简单的文本,也可以是复杂的图片及其他内容(显示一个view).  1.简单用法 Toast.makeText(midlet.getApplicationContext(), "用户名不能为空", Toast.LENGTH_LONG).show(); 2.自定义显示位置效果 代码 toast = Toast.makeText(

ios之TableViewCell重用机制避免重复显示问题

常规配置如下 当超过tableView显示的范围的时候 后面显示的内容将会和前面重复 // 这样配置的话超过页面显示的内容会重复出现 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { // 定义唯一标识 static NSString *CellIdentifier = @"Cell"; // 通过唯一标识创建cell实例 UI

【安卓】自定义基于onDraw的任意动画(不仅仅是平移/旋转/缩放/alpha)、!

思路: 1.基于时间的显示映射.如:给定度数,显示圆弧,加上时序,即可有圆弧动画的效果 2.给定时序.用于驱动动画的一帧帧绘制 方案一.基于ObjectAnimator.动画运作时会调用degree对应set函数(基于放射调用),即setDegree. ObjectAnimator ani=ObjectAnimator.ofInt(myView, "degree", 0,300); ani.start(); 注:1>混编后,默认会将setDegree混掉,导致找不到函数,故混编后

Discuz tag 标签重复显示的解决方法

最近论坛遇到个问题,Discuz tag标签出了问题,编辑一次就添加一个标签,如下图:<ignore_js_op> 删都删不掉,看着真TM不爽,于是,想到了解决办法,如下:Discuz帖子下方的tag标签重复显示,表现为相同的tag标签多次显示,帖子编辑次数越多,tag重复的次数越多.Discuz!官方直到Discuz X3.2也没有解决tag重复的问题.要解决Discuz标签重复,可以通过修改source\module\forum\forum_viewthread.php来实现.用notep

安卓应用-自定义对话框

现在要说的是自定义对话框. 常用的对话框有好多网友们整理的资料,对话框大全啊神马的.但是除了常用对话框外,有时候要根据自己的需求定义新的对话框,下面就稍微说一下自定义对话框的一种做法. 1.需要一个对话框内容的xml配置文件game_dialog.xml,这个应该不需要过多解释,基本布局而已. 有几个图片按钮,所以在drawable下面放几张图,嫌麻烦的话,也可以用Button替换,看下效果. 需要说明的是,所有控件的id这里我都用的@id,因为id我都写在了res/values/ids.xml

安卓,网页控件,显示网页 Android, web controls, display web pages

安卓,网页控件,显示网页Android, web controls, display web pages 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:[email protected] E-mail: 313134555 @qq.com mWebView.loadUrl("https://zhuanlan.zhihu.com/p/28275732"); mWebView.getSettings().setJavaScriptEnabled(true); mWe