繁体   English   中英

如何在Android中的UI线程之后等待?

[英]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

旁注:我不认为发生您的问题是因为s​​etText(...)方法花费了太多时间。 发布您的代码,以便其他人可以看一下。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM