如何在Android中设置文本之间的延迟

Posted

技术标签:

【中文标题】如何在Android中设置文本之间的延迟【英文标题】:How to set a delay between setting texts in Android 【发布时间】:2018-07-25 15:54:18 【问题描述】:

如何在 bt.setText("№") 之间设置多个延迟?

    public void buttonOnClick (View button) 
    final Button bt = findViewById(R.id.button);
    bt.setText("3");
    //wait 1 second
    bt.setText("2");
    //wait 1 second
    bt.setText("1");
    //wait 1 second
    bt.setText("Click!");

【问题讨论】:

【参考方案1】:

由于您不能在 UI 线程上调用 Thread.sleep(只会显示最终结果),您应该在另一个线程上执行此操作,例如:

关于构造函数:

private Handler handler;
public void onCreate(Bundle x) 
     //super and get bt
     final Button bt = findViewById(R.id.button);
     handler = new Handler() 
           public void handleMessage(Message msg) 
                if(msg.what == 0)
                     bt.setText("Click!");
                else
                     bt.setText(String.toString(msg.what));
           
     


public void buttonOnClick (View button) 
   final Button bt = findViewById(R.id.button);
   bt.setText("3");
   //wait 1 second
   handler.sendEmptyMessageDelayed(2, 1000);
   //wait 2 second
   handler.sendEmptyMessageDelayed(1, 2000);
   //wait 3 second
   handler.sendEmptyMessageDelayed(0, 1000);
   bt.setText("Click!");

请注意,我确实使用了 msg.what 那是这样的标识符,但您可以创建一个带有 obj 参数的消息,以便以后使用。

【讨论】:

您只需给出完整的答案。你不希望 OP 尝试一些东西。 OP 将如何学习? 这是显示 Handler 机制仅省略 Message 构造函数部分的唯一方法,我发布的原因是其他人只会使用使用 Runnable 的 postDelayed,而 Handler 本身可以是大量消息。 为什么味精是红色的?我是一个完整的 n00b ( 在哪里??是红色的吗? Handler 被设计成一个队列消息的宿主。 Timer 对并发线程之间的消息传递没有帮助(在很长的路上),而 Handler 有帮助。【参考方案2】:

Java 有 Timer 类,它可能会做你想做的事。 您可能希望使用 TimerTask 类来生成基本/空任务。 然后使用 Timer 运行任务。

Baeldung Timer

【讨论】:

【参考方案3】:
new CountDownTimer(4000, 1000)

   @Override
   public void onTick(long millisUntilFinished) 
       //change text
    

   @Override
   public void onFinish() 

   
.start();

【讨论】:

【参考方案4】:

试试这个:

使用postDelayed

 private static int SPLASH_TIME_OUT = 1000;

  if(bt.equal("3"))
        new Handler().postDelayed(new Runnable() 

                @Override
                public void run() 

                // This method will be executed once the timer is over 
                bt.setText("2");
                
            , SPLASH_TIME_OUT);  
       
    ...
    //You can continue like that.

【讨论】:

【参考方案5】:

使用RxJava,您可以高效地做到这一点。

Observable.interval(1L, TimeUnit.SECONDS)
         .take(2) // how many you want. if you want it infinite just delete this
         .observeOn(androidSchedulers.mainThread())
         .subscribeOn(Schedulers.io())
         .subscribe((l) -> 
               text.setText();//According to number
         , (t) -> 
               //Handle Error
         );

【讨论】:

以上是关于如何在Android中设置文本之间的延迟的主要内容,如果未能解决你的问题,请参考以下文章

如何在android的提示文本中设置字母间距

在R中设置两条指令之间的延迟[重复]

如何在 UITextField 中设置 placeHolder / 用户文本和左边框之间的距离

如何在 android 中设置 react native expo 选择器的样式

如何在xml中设置复合可绘制文本视图的高度和宽度? [关闭]

Android:如何在这个 ListView 中设置图像?