Mi lectura de la documentación de Android encuentra los métodos forceLayout() (que es para producir una presentación de diseño en la próxima solicitud de diseño) y requestLayout() (que se supone que publica una solicitud de diseño inmediata), pero no puedo hacer que se comporten como se anuncia. En particular, si hago un texto configurado antes de un Thread.Sleep y uno después, espera a que el Sleep termine antes de configurar ambos textos a la vez, si o si llamo a forceLayout() y requestLayout() en el medio. Por favor, no respondas con muchas tonterías sobre cómo no debería llamar a Thread.Sleep en el hilo de UI. Si envuelvo el Thread.Sleep en un CountDownTimer, funciona perfectamente (siempre que tenga el tiempo de marcación lo suficientemente corto como para no interferir con el tiempo de sueño, y la duración del temporizador el tiempo suficiente para permitir que termine el sueño. La siguiente es un ejemplo:forceLayout(), requestLayout()
int i=0;
TextView tv2;
TextView tv1;
LinearLayout ll;
Button bt;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ll=new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
tv1=new TextView(this);
tv2=new TextView(this);
bt=new Button(this);
bt.setText("Press to start");
ll.addView(bt);
ll.addView(tv1);
ll.addView(tv2);
tv2.setText("");
setContentView(ll);
bt.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
tv1.setText("starting sleep");
new CountDownTimer(6000,50){
public void onTick(long msuf)
{if(i==1)
{
try{
Thread.sleep(4000);
tv2.setText("waking up");
}
catch(InterruptedException e){};
}
i++;
}
public void onFinish(){}}.start();
}
});
}
Véase también http://stackoverflow.com/questions/13856180/usage-of-forcelayout-requestlayout-and-invalidate – Suragch