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在计时器上设置按钮的可见性的主要内容,如果未能解决你的问题,请参考以下文章