`
wangleyiang
  • 浏览: 220865 次
社区版块
存档分类
最新评论

Android Toast显示时间

阅读更多

Toast虽然有setDuration(int duration)来设置显示时间,但是duration只有两个选择,LENGTH_SHORT = 0和LENGTH_LONG = 1,其它值传入后,在底层似乎被忽略了,被当作0和非0来处理,故不能调整显示时间。

 

如果通过多次show来达到时间累加的效果,由于显示和不显示有渐变的动画效果,则会出现闪烁效果。如果自定义一个类似Toast的View『个人认为,之所以使用Toast,是因为它既能满足和用户进行简单交互,又具有操作简单方便的优势,如果要自定义,为什么一定要是“Toast”的外观呢?=^_^=』,然后添加到窗口,也是一种可行的方法,在此不做说明。看到一个利用反射来实现的文章,在此转一下!:)

 

此时反射机制就派上了用场,利用反射来控制显示和取消显示。关于部分代码的追踪,可以看这里:http://blog.csdn.net/droid_zhlu/article/details/7685084

 

主要代码:

import java.lang.reflect.Field;
import java.lang.reflect.Method;

import android.content.Context;
import android.view.View;
import android.widget.Toast;

public class ReflectToast {

	private Toast mToast;
	private Field field;
	private Object obj;
	private Method showMethod, hideMethod;

	public ReflectToast(Context context, View v) {
		mToast = new Toast(context);
		mToast.setView(v);
		reflectionTN();
	}

	public void show() {
		try {
			showMethod.invoke(obj, null);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void cancel() {
		try {
			hideMethod.invoke(obj, null);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private void reflectionTN() {
		try {
			field = mToast.getClass().getDeclaredField("mTN");
			field.setAccessible(true);
			obj = field.get(mToast);
			showMethod = obj.getClass().getDeclaredMethod("show", null);
			hideMethod = obj.getClass().getDeclaredMethod("hide", null);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
}

测试 调用代码:

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class TestToastDurationActivity extends Activity implements OnClickListener {
    
	private Button showButton;
	private Button hideButton;
	
	private ReflectToast toast;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        TextView textView = new TextView(this);
        textView.setText("这是一个TextView!");
        textView.setBackgroundResource(android.R.drawable.toast_frame);
        toast = new ReflectToast(this, textView);
        
        showButton = (Button) findViewById(R.id.button1);
        hideButton = (Button) findViewById(R.id.button2);
        
        showButton.setOnClickListener(this);
        hideButton.setOnClickListener(this);
        
    }

	@Override
	public void onClick(View v) {
		
		if (toast == null) {
			return;
		}
		
		switch (v.getId()) {
		case R.id.button1:
			toast.show();
			break;
		case R.id.button2:
			toast.cancel();
			break;
		default:
			break;
		}
		
	}
	
	@Override
	protected void onPause() {
		super.onPause();
		if (toast != null) {
			toast.cancel();
		}
	}
	
}

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:padding="5dip" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="显示Toast" />

        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="取消Toast" />
    </LinearLayout>

</LinearLayout>

 运行效果:



 

 

多说一句:问题是死的,但是解决问题的方法确是灵活多变的!利用反射可以控制Toast的显示和取消,同样可以自定义显示时间,然后在时间耗尽时自动取消,如果你原意的话!

 

 

 

  • 大小: 21.4 KB
  • 大小: 18.7 KB
分享到:
评论

相关推荐

    android自定义Toast设定显示时间

    Android 自定义 Toast 设定显示时间是指在 Android 应用程序中,自定义 Toast 的显示时间,而不是使用系统默认的 Toast.LENGTH_SHORT 或 Toast.LENGTH_LONG。本文将详细介绍如何使用 WindowManager 实现自定义 Toast...

    android 自定义修改toast显示时间

    /* 显示toast,自己定义显示长短。 * param1:activity 传入context * param2:word 我们需要显示的toast的内容 * param3:time length long类型,我们传入的时间长度(如500)*/

    Android-AndroidToast即便关闭了通知权限也会正常显示

    创建一个Toast非常简单,通常通过`Toast.makeText()`方法实现,传入上下文(Context)、显示的文本(CharSequence)以及显示时间(Duration:短期Toast或者长期Toast)。例如: ```java Toast.makeText(context, ...

    Android 自定义 Toast 显示时间

    Android 自定义 Toast 显示时间 Android 自定义 Toast 显示时间是 Android 开发中的一个重要知识点。Toast 是 Android 中的一种常见的提示信息,通常用于显示一些短暂的信息。但是,Android 的默认 Toast 显示时间...

    Android Toast任意显示时间

    `Android Toast任意显示时间`这个主题就是针对这一限制,探讨如何让`Toast`根据我们的需求来显示指定时长。 在Android SDK中,`Toast`类提供了`makeText()`方法来创建一个`Toast`对象,可以设置显示的内容和类型。...

    Android-AndroidToast工具类

    在Android应用开发中,`AndroidToast`工具类是一种常见的组件,用于向用户显示短暂的通知信息。这些信息通常出现在屏幕上的某个位置,展示几秒钟后自动消失,不会干扰用户的正常操作。`AndroidToast`的使用非常方便...

    android 解决Toast重复显示问题

    在Android开发中,`Toast`是一种轻量级的提示方式,用于向用户显示短暂的信息,如操作结果或者一些简单的提示。然而,在某些情况下,我们可能会遇到`Toast`重复显示的问题,这可能是由于不当的调用或者多线程环境中...

    android Toast设置显示时间效果

    默认情况下,`Toast`的显示时间分为两种:`LENGTH_SHORT`(约2秒)和`LENGTH_LONG`(约3.5秒)。然而,在某些情况下,开发者可能需要自定义`Toast`的显示时间以适应特定的用户体验需求。本文将深入探讨如何自定义`...

    Android Toast自定义显示时间

    Android Toast 自定义显示时间 Android Toast 自定义显示时间是 Android 开发中一个重要的知识点。 Toast 是 Android 中使用频率较高的弹窗提示手段,使用起来简单、方便。但是, Toast 的显示时间却是一个长期以来...

    android Toast大全(五种情形)

    - `Toast.LENGTH_SHORT`:设置提示持续时间,此值表示短暂显示(默认为2秒左右)。 #### 三、自定义显示位置效果 **定义:** 通过`setGravity`方法可以改变`Toast`出现的位置,使其更加灵活。 **代码示例:** ```...

    Toast自定义视图,设置显示时间的方法

    总之,自定义`Toast`视图和设置显示时间是提升Android应用交互体验的有效手段。通过灵活地调整视图布局和显示时间,你可以根据应用的需求创建出各种各样的提示信息,使用户界面更加生动和个性化。在实际开发中,一定...

    Android Toast各种使用方法及DEMO

    在Android开发中,`Toast`是一个非常常用的组件,它用于向用户显示短暂的消息提示,而不会中断当前应用程序的运行。`Toast`的消息会浮现在屏幕上方或下方,并在指定时间后自动消失,非常适合用于告知用户一些简短的...

    ReactNativeToast一个用于android和ios类似于androidtoast提示控件

    5. **持续时间**:可以设置Toast显示的时间长度,比如短时间显示或长时间显示。 6. **动画效果**:添加淡入淡出、滑动等动画效果,提升用户体验。 7. **回调函数**:提供显示和隐藏的回调函数,可以在特定事件(如...

    Android 自定义toast显示效果实例.rar

    Android 源码演示5种toast显示效果,一共是以下几种演示:默认的Toast显示、自定义位置的Toast显示、带图片的Toast显示、完全自定义的Toast显示、长时间的Toast显示,Android 自定义5种toast显示效果。有的Toast效果...

    Toast的几行代码

    这里,`context`是Android应用中的上下文对象,`"这是一条简单的Toast消息"`是要显示的内容,`Toast.LENGTH_SHORT`定义了提示的持续时间,可以选择`LENGTH_SHORT`或`LENGTH_LONG`。 2. **自定义布局** 如果想要...

    c# winform 类似android toast消息功能

    在这个类中,可以包含一个Label用于显示文本,一个PictureBox用于显示图标,以及一些必要的属性如消息文本、显示时间等。 2. **设计控件外观**:在设计视图中布局控件,确保它们的样式和位置符合Toast的视觉效果。...

    PhoneGap android的Toast插件

    在`ToastPlugin`中,`execute`方法会将这些参数封装好,然后调用`makeText`生成Toast对象,最后使用`show`方法将Toast显示在屏幕上。 另一方面,`phonegap-toast.js`是JavaScript部分的代码,它定义了一个PhoneGap...

    Android-自定义Toast解决系统Toast存在的问题

    在Android应用开发中,Toast是一种常用的轻量级提示方式,用于短暂显示消息,告知用户一些信息或者操作结果。然而,系统默认的Toast虽然方便,但其样式和功能相对固定,不能满足所有开发者的需求。在某些情况下,...

    Android-Android实现Toast自定义样式

    本文将详细介绍如何在Android中实现`Toast`的自定义样式,包括自定义位置、添加图片以及自定义显示时长。 一、自定义`Toast`的位置 系统默认的`Toast`会在屏幕底部或中间显示,但这往往不能满足所有设计需求。我们...

Global site tag (gtag.js) - Google Analytics