我对 android 文档的阅读发现了 forceLayout() 方法(在下一个布局请求时生成布局显示)和 requestLayout() (应该发布即时布局请求),但我无法让它们表现如宣传的那样。特别是,如果我在 Thread.Sleep 之前和之后设置一个文本,它会等待 Sleep 完成,然后同时设置两个文本,无论我是否调用 forceLayout() 和 requestLayout() 。请不要对我不应该如何在 UI 线程中调用 Thread.Sleep 胡说八道。如果我将 Thread.Sleep 包装在 CountDownTimer 中,它工作得非常好(只要我的滴答时间足够短而不会干扰睡眠时间,并且计时器的持续时间足够长以允许睡眠完成。以下是一个例子:
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();
}
});
}