android toast显示时间,Android Toast自定义显示时间「建议收藏」

android toast显示时间,Android Toast自定义显示时间「建议收藏」Toast是Android中使用频率较高的弹窗提示手段,使用起来简单、方便。常规使用方法这里不做说明,继前一篇博客《Android中Toast全屏显示》,其中抛砖引玉的给出一个简单的实现Toast全屏显示的方法后,发现无法控制Toast的显示时长。虽然Toast中有setDuration(intduration)接口,但是跟踪代码发现,设置的时间没起作用,只有系统默认的两个时间LENGTH_D…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

Toast是Android中使用频率较高的弹窗提示手段,使用起来简单、方便。常规使用方法这里不做说明,继前一篇博客《Android中Toast全屏显示》 ,其中抛砖引玉的给出一个简单的实现Toast全屏显示的方法后,发现无法控制Toast的显示时长。虽然Toast中有setDuration(int duration)接口,但是跟踪代码发现,设置的时间没起作用,只有系统默认的两个时间LENGTH_DURATION = 3500毫秒,SHORT_DURATION = 2000毫秒。也就是说,无论我们设置多长时间,最终影响Toast弹窗时间的只有Toast.LENGTH_LONG和Toast.LENGTH_SHORT两个参数。

目前解决该问题的方法主要有两个:

1、利用反射原理,通过控制Toast的show()和hide()接口来控制显示时间,可参见博客《利用反射机制控制Toast的显示时间》。不过该方法只对Android4.0以下的系统有效,通过模拟器实测,也是如此。当前系统基本都在Android4.0以上,该方法过于老旧。

2、利用WindowManager的addView()方法动态刷屏,可看见博客《Android自定义Toast,可设定显示时间》 。该方法被很多软件用来显示浮动窗口和图片的动态悬浮效果,如360手机软件和一些手游软件。在Android4.0上是一种不错的选择。当然,对于遇到系统默认把悬浮窗口功能关闭的手机,这招可能就不灵了。

通过分析Toast的显示原理和弹窗控制逻辑,本人借助Handler和Runnable机制,也成功实现了对Toast显示任意自定义时长。代码是在Toast全屏显示的基础上修改而来,贴出如下:

package com.dls.nltest;

import android.content.Context;

import android.os.Handler;

import android.util.DisplayMetrics;

import android.util.Log;

import android.view.Gravity;

import android.view.WindowManager;

import android.widget.LinearLayout;

import android.widget.TextView;

import android.widget.Toast;

import android.widget.LinearLayout.LayoutParams;

public class GenericToast{

private static final String TAG = “GenericToast”;

private static final int TOAST_TEXTSIZE = 20;

/** {@link Toast#LENGTH_SHORT} default time is 3500ms */

private static final int LENGTH_SHORT_TIME = 2000;

private static Context mContext = null;

private static Toast mToast = null;

private static TextView mTextView = null;

private static int mDuration = 0;

private static CharSequence mText = null;

private Handler mHandler = new Handler();

private GenericToast(Context context) {

mContext = context;

}

public static GenericToast makeText(Context context, CharSequence text, int duration){

GenericToast instance = new GenericToast(context);

mContext = context;

mDuration = duration;

mText = text;

return instance;

}

private static void getToast(Context context, CharSequence text){

mToast = Toast.makeText(context, null, Toast.LENGTH_LONG);

mToast.setGravity(Gravity.CENTER, 0, 0);

LinearLayout toastView = (LinearLayout)mToast.getView();

// Get the screen size with unit pixels.

WindowManager wm = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);

DisplayMetrics outMetrics = new DisplayMetrics();

wm.getDefaultDisplay().getMetrics(outMetrics);

mTextView = new TextView(context);

LayoutParams vlp = new LayoutParams(outMetrics.widthPixels,

outMetrics.heightPixels);

vlp.setMargins(0, 0, 0, 0);

mTextView.setLayoutParams(vlp);

mTextView.setTextSize(TOAST_TEXTSIZE);

mTextView.setText(text);

mTextView.setGravity(Gravity.CENTER);

toastView.addView(mTextView);

}

/**

* Before call this method, you should call {@link makeText}.

*

* @return Toast display duration.

*/

public int getDuration(){

return mDuration;

}

public void show(){

Log.d(TAG, “Show custom toast”);

mHandler.post(showRunnable);

}

public void hide(){

Log.d(TAG, “Hide custom toast”);

mDuration = 0;

if(mToast != null){

mToast.cancel();

}

}

private Runnable showRunnable = new Runnable(){

@Override

public void run() {

if(mToast != null){

mTextView.setText(mText);

}else{

getToast(mContext, mText);

}

if(mDuration != 0){

mToast.show();

}else{

Log.d(TAG, “Hide custom toast in runnable”);

hide();

return;

}

if(mDuration > LENGTH_SHORT_TIME){

mHandler.postDelayed(showRunnable, LENGTH_SHORT_TIME);

mDuration -= LENGTH_SHORT_TIME;

}else{

mHandler.postDelayed(showRunnable, mDuration);

mDuration = 0;

}

}

};

}

Toast弹窗10s,测试代码如下:

GenericToast mGToast = GenericToast.makeText(this, “I am generic toast”, 10 * 1000);

mGToast.show();

如果需要终止弹窗,只要在需要的地方调用hide()即可。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/194218.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 最佳路径分析_最佳路径选择

    最佳路径分析_最佳路径选择最佳路径分析(作者:吴东梅,撰写时间:2019年1月17日)学习了GIS技术,让我们对地理信息系统有了一定的了解,也让我们知道了我们平时常用的导航系统里面的导航最佳路径里面的一些奥妙。现在就让我们了解一下如何制出最佳路径的方法并应用在我们自己的项目中吧!1、 先在SuperMapiDesktop9D把你的地图打开,然后点击上方导航条上面的交通分析,里面有一个拓扑构网,鼠标移到拓扑构网上…

    2022年8月24日
    13
  • pypy 打包_手机按键精灵脚本编写

    pypy 打包_手机按键精灵脚本编写我们可以在ArcGIS之外调用arcpy站点包运行python独立脚本,从而批量化任务提高工作效率。如果可以把做好的脚本打包成exe是不是就更方便了呢?想想一键式处理也挺开心的。Python打包的问题最早是在ArcGIS知乎中看到的,有人提问为何打包失败,我还有幸被邀请回答,虽然在这一块我也是小白一枚。后来,得空时也搜了下相关的资源,虽然大部分人持悲观态度说arcpy不支持打包,但刚好有个帖

    2025年10月19日
    2
  • 2018 java 阿里笔试题

    2018 java 阿里笔试题想进阿里的同学注意了,这里是修真院面试笔记整理,那么这里就给大家分享一下【2018java阿里笔试题】1、String,StringBuffer,StringBuilder的区别是什么?String为什么是不可变的?2、Vector,ArrayList,LinkedList的区别是什么?3、HashTable,HashMap,TreeMap区别?5、Tomcat,A…

    2025年10月14日
    4
  • HTML简单注册界面——含表单验证[通俗易懂]

    HTML简单注册界面——含表单验证[通俗易懂]最近学习HTML表单,感慨万千。虽然看起来好像不难学,但要是真自己实践起来问题却多多。这里是我写的一个简单的注册页面,只有“注册账号、密码、重输密码”三个文本框,还包含了原生JavaScript验证。(记一下,也希望能给有需要的人一点帮助。)

    2025年7月20日
    3
  • 微软Office2007专业增强版 集成最新SP3[通俗易懂]

    微软Office2007专业增强版 集成最新SP3[通俗易懂]微软Office2007专业增强版,集成最新SP3补丁包,集成序列号,安装完后自动激活,不仅在功能上进行了优化,而且安全性稳定性更得到了巩固。  MicrosoftOfficeProfessionalPlus2007包括:  MicrosoftOfficeExcel2007  MicrosoftOfficeOutlook2007  MicrosoftOfficePower…

    2022年7月19日
    30
  • 天气预报api免费接口_天气API

    天气预报api免费接口_天气API网上几乎所有的天气接口都需要注册key,然后还各种频率限制,每天调用次数才几百次?太坑爹了吧一个简单的天气预报功能,为什么要搞的这么复杂,收什么费?推荐一个真正免费的天气API接口,返回json,jsonp格式没有调用次数、频率和IP限制,并且提供7日天气/15日天气/40日天气/小时预报/生活指数/空气质量/预警信息调用也很简单,一行代码搞定,可在A…

    2022年8月30日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号