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的显示和取消,同样可以自定义显示时间,然后在时间耗尽时自动取消,如果你原意的话!
相关推荐
Android 自定义 Toast 设定显示时间是指在 Android 应用程序中,自定义 Toast 的显示时间,而不是使用系统默认的 Toast.LENGTH_SHORT 或 Toast.LENGTH_LONG。本文将详细介绍如何使用 WindowManager 实现自定义 Toast...
/* 显示toast,自己定义显示长短。 * param1:activity 传入context * param2:word 我们需要显示的toast的内容 * param3:time length long类型,我们传入的时间长度(如500)*/
创建一个Toast非常简单,通常通过`Toast.makeText()`方法实现,传入上下文(Context)、显示的文本(CharSequence)以及显示时间(Duration:短期Toast或者长期Toast)。例如: ```java Toast.makeText(context, ...
Android 自定义 Toast 显示时间 Android 自定义 Toast 显示时间是 Android 开发中的一个重要知识点。Toast 是 Android 中的一种常见的提示信息,通常用于显示一些短暂的信息。但是,Android 的默认 Toast 显示时间...
`Android Toast任意显示时间`这个主题就是针对这一限制,探讨如何让`Toast`根据我们的需求来显示指定时长。 在Android SDK中,`Toast`类提供了`makeText()`方法来创建一个`Toast`对象,可以设置显示的内容和类型。...
在Android应用开发中,`AndroidToast`工具类是一种常见的组件,用于向用户显示短暂的通知信息。这些信息通常出现在屏幕上的某个位置,展示几秒钟后自动消失,不会干扰用户的正常操作。`AndroidToast`的使用非常方便...
在Android开发中,`Toast`是一种轻量级的提示方式,用于向用户显示短暂的信息,如操作结果或者一些简单的提示。然而,在某些情况下,我们可能会遇到`Toast`重复显示的问题,这可能是由于不当的调用或者多线程环境中...
默认情况下,`Toast`的显示时间分为两种:`LENGTH_SHORT`(约2秒)和`LENGTH_LONG`(约3.5秒)。然而,在某些情况下,开发者可能需要自定义`Toast`的显示时间以适应特定的用户体验需求。本文将深入探讨如何自定义`...
Android Toast 自定义显示时间 Android Toast 自定义显示时间是 Android 开发中一个重要的知识点。 Toast 是 Android 中使用频率较高的弹窗提示手段,使用起来简单、方便。但是, Toast 的显示时间却是一个长期以来...
- `Toast.LENGTH_SHORT`:设置提示持续时间,此值表示短暂显示(默认为2秒左右)。 #### 三、自定义显示位置效果 **定义:** 通过`setGravity`方法可以改变`Toast`出现的位置,使其更加灵活。 **代码示例:** ```...
总之,自定义`Toast`视图和设置显示时间是提升Android应用交互体验的有效手段。通过灵活地调整视图布局和显示时间,你可以根据应用的需求创建出各种各样的提示信息,使用户界面更加生动和个性化。在实际开发中,一定...
在Android开发中,`Toast`是一个非常常用的组件,它用于向用户显示短暂的消息提示,而不会中断当前应用程序的运行。`Toast`的消息会浮现在屏幕上方或下方,并在指定时间后自动消失,非常适合用于告知用户一些简短的...
5. **持续时间**:可以设置Toast显示的时间长度,比如短时间显示或长时间显示。 6. **动画效果**:添加淡入淡出、滑动等动画效果,提升用户体验。 7. **回调函数**:提供显示和隐藏的回调函数,可以在特定事件(如...
Android 源码演示5种toast显示效果,一共是以下几种演示:默认的Toast显示、自定义位置的Toast显示、带图片的Toast显示、完全自定义的Toast显示、长时间的Toast显示,Android 自定义5种toast显示效果。有的Toast效果...
这里,`context`是Android应用中的上下文对象,`"这是一条简单的Toast消息"`是要显示的内容,`Toast.LENGTH_SHORT`定义了提示的持续时间,可以选择`LENGTH_SHORT`或`LENGTH_LONG`。 2. **自定义布局** 如果想要...
在这个类中,可以包含一个Label用于显示文本,一个PictureBox用于显示图标,以及一些必要的属性如消息文本、显示时间等。 2. **设计控件外观**:在设计视图中布局控件,确保它们的样式和位置符合Toast的视觉效果。...
在`ToastPlugin`中,`execute`方法会将这些参数封装好,然后调用`makeText`生成Toast对象,最后使用`show`方法将Toast显示在屏幕上。 另一方面,`phonegap-toast.js`是JavaScript部分的代码,它定义了一个PhoneGap...
在Android应用开发中,Toast是一种常用的轻量级提示方式,用于短暂显示消息,告知用户一些信息或者操作结果。然而,系统默认的Toast虽然方便,但其样式和功能相对固定,不能满足所有开发者的需求。在某些情况下,...
本文将详细介绍如何在Android中实现`Toast`的自定义样式,包括自定义位置、添加图片以及自定义显示时长。 一、自定义`Toast`的位置 系统默认的`Toast`会在屏幕底部或中间显示,但这往往不能满足所有设计需求。我们...