android在计时器上设置按钮的可见性

Posted

技术标签:

【中文标题】android在计时器上设置按钮的可见性【英文标题】:android set visibility of a button on timer 【发布时间】:2010-08-02 22:01:56 【问题描述】:

我有一个应用程序在程序开始时显示免责声明。我希望一个按钮在一段时间内保持不可见,然后变为可见。 我设置了一个休眠 5 秒的线程,然后尝试使按钮可见。但是,当我执行代码时出现此错误:

08-02 21:34:07.868: ERROR/androidRuntime(1401): android.view.ViewRoot$CalledFromWrongThreadException: 只有创建视图层次结构的原始线程才能接触其视图。

如何计算 5 秒,然后让按钮可见? 谢谢。

Thread splashTread = new Thread() 
           @Override
           public void run() 
            try 
                   int waited = 0;
                   while(_active && (!_ok2)) 
                       sleep(100);
                       if(_active) 
                           waited += 100;
                           if(waited >= _splashTime)
                           
                            turnButtonOn();
                           

                       
                   
                catch(InterruptedException e) 
                   // do nothing
                finally 
                   finish();
                   startActivity(new Intent("com.lba.mixer.Choose"));

               
    ;
    splashTread.start();


      public static void turnButtonOn() 
         okButton.setVisibility(View.VISIBLE);
      

【问题讨论】:

【参考方案1】:

问题是当您调用okButton.setVisibility(View.VISIBLE); 时您不在 UI 线程中,因为您创建并运行了自己的线程。您需要做的是获取按钮的处理程序并通过您通过处理程序获得的 UI 线程设置可见性。

所以不是

okButton.setVisibility(View.VISIBLE)

你应该这样做

okButton.getHandler().post(new Runnable() 
    public void run() 
        okButton.setVisibility(View.VISIBLE);
    
);

【讨论】:

我们能找到类似的东西吗,ListView 的特定视图部分从 3(任何时间实例)秒开始可见。【参考方案2】:

我发现这是一个更简单的解决方案。延迟 7 秒可见

continuebutton.setVisibility(View.INVISIBLE);
continuebutton.postDelayed(new Runnable() 
        public void run() 
            continuebutton.setVisibility(View.VISIBLE);
        
    , 7000);

【讨论】:

哇,这个没问题! 在 2017 年仍然可以正常工作,需要延迟在 searchView 中关闭我的 listView 以使 softInPutMode 先关闭,然后是 listView afterwords。对于 ConstraintLayout 中的跳跃视图,通过 softInputMode 的上升和关闭,这是一个很好的解决方法。【参考方案3】:

我发现这是解决问题的更好方法 (按钮 id = but_resend)

定义处理程序

  private Handler handler;

在扩展类中调用函数

 showButtons();

课后定义

private void showButtons() 
        handler = new Handler();

        handler.postDelayed(new Runnable() 
            @Override
            public void run() 
                ((Button) findViewById(R.id.but_resend)).setVisibility(View.VISIBLE);
            
        , 20000); // produce 20 sec delay in button visibility


    

并记住通过

隐藏.xml文件中的可见性
android:visibility="invisible"

【讨论】:

谢谢兄弟,这非常有帮助。

以上是关于android在计时器上设置按钮的可见性的主要内容,如果未能解决你的问题,请参考以下文章

当我调用可见性时,Android 动画不起作用

如何通过外部按钮在列表视图中设置可见性?

如何保存可见性android

无法设置约束组的可见性

在按钮上单击列表视图中列的可见性应设置为 false

当可见性设置为Gone或Visible时,如何排列线性布局?