安德鲁斯Toast它们的定义和防止重复显示器

Toast安卓系统,当用户错误或功能运行完成,提示,要求用户,它不集中,并且将在一定时间内消失。然而,在用户继续误(如登录,password错)当次,将有多个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,"password不能为空"),

效果会是这种:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYmFpeXVsaWFuZzIwMTM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >

版权声明:本文博客原创文章,博客,未经同意,不得转载。

时间: 2024-10-28 22:25:38

安德鲁斯Toast它们的定义和防止重复显示器的相关文章

多个类定义attr属性重复的问题:Attribute &quot;xxx&quot; has already been defined

如果从单独开发app的话,可能不会遇到多个自定义类的attribute 的名字重复的问题.但是如果是团队合作开发的话,可能会碰到这样的问题,A和B自定义的两个类都用了同一个名字来定义属性,这时系统会报出警告,Attribute "xxx" has already been defined. A和B又都不想修改自己的名字,这时就很头痛. 下面举个例子,在values文件夹下定义一个上面的attrs.xml的文件,eclipse即会报错:Attribute "icon"

C语言头文件中定义全局变量导致重复定义错误

合作方升级SDK后,程序编译出现变量重复定义的错误,通过错误提示无法找到什么位置重复定义了,但确定是引入新SDK后才出现的错误,从SDK的头文件中查找,最终发现在头文件中定义了全局变量 我们的项目在多个头文件中include了SDK的头文件,所以相当于这个全局变量在多个头文件中定义了,因此报错. 总结:头文件不要有任何全局变量的定义出现

自定义Toast解决快速点击时重复弹出,排队无止尽

解决办法:自定义MyToast类: public class MyToast { /** 之前显示的内容 */ private static String oldMsg ; /** Toast对象 */ private static Toast toast = null ; /** 第一次时间 */ private static long oneTime = 0 ; /** 第二次时间 */ private static long twoTime = 0 ; /** * 显示Toast * @p

自己定义Toast

.指定Toast通知的位置 自己定义Toast: 怎样自己定义Toast?? 第一步: 写一个XML样式自己定义Toast显示样式 在res/layout下创建一个xml文件toast(文件名称自己定义) <?xml version="1.0" encoding="utf-8"? > <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

c++工程重复编译与重复定义

#ifndef #define #endif防止的是"重复编译",而不是"重复定义"重复编译可能造成重复定义,但重复定义的来源不只有重复编译 从代码变成可执行的程序,需要两个步骤编译和链接编译开始时,将所有#include头文件的地方替换成该头文件的代码在编译阶段,编译所有源文件成为模块,各模块中的每个变量与函数都得到了属于自己的空间在链接阶段,各个模块被组合到一起 #ifndef能够防止在编译阶段,一段代码被重复编译,并且由此可以避免一个变量被重复定义但它不能防止

github项目解析(七)--&gt;防止按钮重复点击

转载请标明出处:一片枫叶的专栏 本文中我将介绍一下我自己封装的一个小的工具类库:按钮点击事件类库. 作用: 该类库可以防止按钮重复点击,可以判断网络状态,可以判断用户登录状态,以及自定义验证条件等等. 说明: 其实现的核心原理就是通过自定义实现自身的OnClickListener类,并重写其中的onClick方法,在onClick方法中执行相应的判断逻辑之后回调我们自定义的抽象方法. 具体效果如下图所示: 使用方式 屏蔽多次点击事件 /** * 测试快速点击事件 */ fastButton.se

菜鸟的Xamarin.Forms前行之路——原生Toast的简单实现方法

项目中信息提示框,貌似只有个DisplayAlert,信息提示太过于单一,且在有些场合Toast更加实用,以下是一个简单的原生Toast的实现方法 项目地址:https://github.com/weiweu/TestProject/tree/dev/Toast 共享项目 定义一个接口IToast,包括Short和Long两个方法: public interface IToast { void LongAlert(string message); void ShortAlert(string m

Toast——提醒方式

Toast是Android系统提供的一种非常好的提醒方式,在程序中可以使用它将一些短小的信息通知给用户,这些信息会在一段时间后自动消失,并且不会占用任何屏幕空间,我们现在就尝试一下如何在活动中使用Toast.首先需要定义一个弹出Toast的触发点,正好界面上有个按钮,那我们就让点击这个按钮的时候弹出一个Toast吧.在onCreate()方法中添加代码:protected void onCreate(Bundle savedInstanceState) { super.onCreate(save

【Win10开发】Toast通知——前台激活

上篇文章我们将了大体的Toast通知的模板及实例展示,那么,这篇文章就来讲讲Toast的前台激活. 首先是xaml界面,很简单,我们放一个Button和TextBlock,TextBlock用来显示Toast通知传过来的内容. <StackPanel VerticalAlignment="Center"> <Button Content="通知" VerticalAlignment="Top" HorizontalAlignme