`

Toast和Handler的间隔使用

阅读更多
本人在项目开发过程,需要实现一个“来电归属地”的功能,因此用到了Toast。但Toast的显示时间,不受我们控制,系统只提供了两个配置参数,分别是LENGTH_LONG,LENGTH_SHORT。因为要让Toast长期显示,需要另外一个线程,每隔一个时间段,就循环显示一次。
       先说明一下,本次需要用到Handle机制,因此不了解或者不熟悉Handle的同学,请先去看看Android上的Handle机制!
       下面开始讲解代码实现详情!
       先写一个包装类,就叫MyToast吧,如下
        public class MyToast {

          private Context mContext = null;

          private Toast mToast = null;

          private Handler mHandler = null;

          private Runnable mToastThread  = new Runnable() {

 

            @Override

            public void run() {

              mToast.show();

              mHandler.postDelayed(mToastThread, 3000);//每隔3秒显示一次,经测试,这个时间间隔效果是最好

            }

         };



         public MyToast(Context context){

           mContext = context;

           mHandler = new Handler(mContext.getMainLooper());

           mToast = Toast.makeText(mContext, "自由@飞翔", Toast.LENGTH_LONG);

         }



         public void setText(String text){

           mToast.setText(text);

         }



        public void show(){

          mHandler.post(mToastThread);

        }



       public void cancel() {

        mHandler.removeCallbacks(mToastThread);//先把显示线程删除

        mToast.cancel();// 把最后一个线程的显示效果cancel掉,就一了百了了

       }

    }




MainActivity 的代码如下:
  public class MainActivity extends Activity implements OnClickListener{

     private Button show_button;

    private Button cancel_button;

    private MyToast myToast;



    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        show_button = (Button) findViewById(R.id.show_button);

        cancel_button = (Button) findViewById(R.id.cancel_button);

        show_button.setOnClickListener(this);

        cancel_button.setOnClickListener(this);

        myToast = new MyToast(this);

    }

   

   @Override

   public void onClick(View v) {

    if(v == show_button){

      myToast.show();

    }else if (v == cancel_button) {

     myToast.cancel();

   }

}

}
分享到:
评论

相关推荐

    Toast和Handler的间隔使用实例

    这就是`Toast`和`Handler`间隔使用的目的。 `Toast`是Android系统提供的一个简单易用的组件,它可以在屏幕的某个位置短暂显示一条信息,然后自动消失。默认提供了`LENGTH_SHORT`和`LENGTH_LONG`两种显示时长,但...

    android 解决Toast重复显示问题

    4. **避免循环调用**:如果`Toast`在循环或定时任务中使用,可以设置一个标志位来控制是否需要显示,或者使用`Handler`延迟调用来间隔显示。 5. **使用Snackbar替代**:对于更复杂的提示需求,可以考虑使用`...

    自定义Toast

    4. **处理多个`Toast`**: 创建一个队列来管理待显示的`Toast`,并使用Handler或者异步任务来控制显示顺序和时间间隔,这样就可以实现连续、快速地显示多个`Toast`。 5. **动画效果**: 可以通过修改`View`的属性(如...

    (Handler)按下按钮后间隔3秒自动弹出一个Toast显示当前时间,按返回时有弹出对话框提示是否退出程序,按确认后退出程序

    编写一个程序,按下按钮后间隔3秒自动弹出一个Toast显示当前时间,按返回时有弹出对话框提示是否退出程序,按确认后退出程序 这是android studio文档,eclipse只需要借鉴代码复制粘贴即可

    Android控件单双击判断处理

    这里我们用`Handler`和`Runnable`来控制时间间隔: ```java public class DoubleTapHelper implements View.OnClickListener { private static final int DOUBLE_CLICK_DELAY = 300; // 双击间隔时间,单位为...

    按2次退出app

    4. 使用Handler取消计时器:在用户没有在规定时间内按下第二次返回键的情况下,通过Handler的`removeCallbacks()`方法取消计时器的任务,防止计数器被错误地重置。 三、注意事项 1. 在其他Activity中也需要重写`...

    验证码倒计时

    传统的实现方式通常会使用`Timer`和`Handler`,但这种方式代码复杂,且存在一些潜在的问题,如内存泄漏。在本示例中,我们将探讨如何使用`CountDownTimer`这个更简洁、易用的类来实现验证码倒计时。 `...

    swift5.0,定时器,活动倒计时,alter弹框,吐司弹框.zip

    定时器是iOS和macOS开发中的一个关键组件,它允许开发者在指定的时间间隔内执行某个任务。在Swift中,我们可以使用`Timer`类来创建和管理定时器。创建定时器通常包括以下几个步骤:1) 使用`RunLoop.main.addTimer...

    android倒计时功能的实现(CountDownTimer)

    `CountDownTimer`类提供了一种简单而有效的方式,用于实现倒计时功能,无需深入理解线程和Handler的复杂性。 #### CountDownTimer简介 `CountDownTimer`是Android SDK中提供的一个用于执行倒计时任务的类。它简化...

    基于Android系统Api封装常用工具类

    8. **对话框和 toast**:统一管理全局的提示信息,如自定义对话框和Toast的显示。 9. **动画**:封装一些常用的动画效果,如渐变、旋转、缩放等,提高UI交互的体验。 10. **偏好设置**:简化SharedPreferences的...

    Android按两次返回退出应用的代码

    此外,你还可以使用`Handler`或`CountDownTimer`来替代`Toast`来提供更友好的用户反馈,比如显示一个倒计时提示,告诉用户他们还有多长时间可以按第二次返回键。 总结来说,实现“Android按两次返回退出应用”的...

    Android退出程序

    值得注意的是,虽然用户可能期望通过双击退出来节省资源,但Google官方并不推荐强制关闭应用,因为Android系统会自行管理应用的内存使用。过度关注退出操作可能会对用户体验产生负面影响,尤其是在系统资源管理方面...

    Android倒计时功能的实现(CountDownTimer)

    可以使用 `runOnUiThread` 或 `Handler` 来更新UI: ```java @Override public void onTick(long millisUntilFinished) { int secondsRemaining = (int) (millisUntilFinished / 1000); // 更新UI,例如更新...

    Android常用工具类Utils

    本篇将详细阐述`Android常用工具类Utils`的相关知识点,涵盖系统操作、图像处理、对话框管理、Toast提示、文件操作、日志记录、通知栏推送、SharedPreferences存储、线程管理和时间日期处理等方面。 1. **系统工具*...

    Android期末复习题01

    - **执行结果**:这段代码会导致异常,因为直接创建`Toast`对象后不能使用`setText()`方法来设置提示框文本。 **知识点18:`setOnTouchEvent`返回值的区别** - **区别**:返回`true`表示这个消息已经被处理结束,...

    总结Android中多线程更新应用的页面信息的方式

    在Android开发中,多线程更新页面信息是一个常见的需求,主要为了避免UI阻塞,提高用户体验。以下是几种在Android中更新UI线程的方式: ...同时,需要注意避免内存泄漏和线程安全问题,特别是在使用Handler时。

    Android 点击两次返回键退出程序

    new Handler().postDelayed(new Runnable() { @Override public void run() { backPressCount = 0; } }, TIME_INTERVAL); } else { backPressCount = 0; finish(); // 结束当前Activity return true; } ...

    Android应用源码之返回键退出程序的两种方式.zip

    Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show(); backPressCount++; new Handler().postDelayed(new Runnable() { @Override public void run() { backPressCount = 0; // 如果2秒内...

    Android高级应用源码-返回键退出程序的两种方式.zip

    Toast.makeText(context, "再按一次退出程序", Toast.LENGTH_SHORT).show(); } Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { BACK_PRESSED_COUNT ...

Global site tag (gtag.js) - Google Analytics