zoukankan      html  css  js  c++  java
  • 自定义Toast排队重复显示问题:

    原文 http://blog.csdn.net/baiyuliang2013/article/details/38655495
    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,"密码不能为空"),

  • 相关阅读:
    Linux下配置免密登录!
    centos7主机名的修改
    centos7和centos6区别
    Log4j的配置文件
    Java读取配置文件的几种方法
    关于WEB-INF目录下无法访问webapp下的css等静态文件
    metasploit 渗透测试笔记(meterpreter篇)
    metasploit 渗透测试笔记(基础篇)
    metasploit渗透测试笔记(内网渗透篇)
    自学PHP有哪些书籍和教程值得推荐?
  • 原文地址:https://www.cnblogs.com/leihupqrst/p/4512805.html
Copyright © 2011-2022 走看看