[英]How to wait after UI thread in Android?
在我的活动中,我有一个方法可以根据TextView的宽度来增大或减小字体大小。 我在TextView上执行setText以输入新值(这很可能会增加或减小ViewText的宽度),然后直接进入我的方法。 我的问题是,当我输入方法时,TextView的大小尚未更改,因此我猜测UI线程将花费更多时间来完成TextView的大小调整,因此我的方法无法正常工作。 那么,如何在UI线程之后等待,以便我可以正确执行方法的代码?
这是我主要活动的代码。 方法texteAffichage只是设置TextView中的内容,如果需要,gestionPolice会调整字体大小。 当我在gestionPolice中执行sysout时,我永远都无法获得TextView的当前宽度,因为似乎没有时间这样做。
affichage.setText(texteAffichage((Button) v));
gestionPolice();
我的建议是:
tv.setText("someText");
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
int width = tv.getWidth();
// your code reacting to the change in width
}
}, 50);
50毫秒应该足以完成UI更改,但足以让用户忽略。
正如西蒙正确指出的那样,这不一定是最佳解决方案。 举例说明如何使用GlobalLayoutListener :
final ViewTreeObserver vto = tv.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
width = tv.getWidth();
// your code reacting to the change in width
}
});
您可以使用Handler 延迟代码:
Handler h = new Handler();
h.postDelayed(new Runnable() {
@Override
public void run() {
// DO DELAYED STUFF
}
}, your_variable_amount_of_time); // e.g. 3000 milliseconds
旁注:我不认为发生您的问题是因为setText(...)方法花费了太多时间。 发布您的代码,以便其他人可以看一下。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.