我正在尝试从主Activity中实例化Progress Bar
并将其动态添加到视图中。当我这样做时,我得到一个酒吧:
ProgressBar bar = new ProgressBar(this, null, android.R.attr.progressBarStyleHorizontal);
LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
bar.setLayoutParams(params);
bar.setId(mInt);
LinearLayout layout = (LinearLayout) findViewById(R.id.layout);
layout.addView(bar);
我启动了一个只包含上述代码的新项目,并且进度条显示正确。
如果我在上面的代码中添加以下行,则屏幕为空白一秒钟,然后显示半满的栏。我希望看到一个空吧一秒钟,然后它会达到50%。
try {
Thread.sleep(2000);
} catch ...{
}
bar.setProgress(50);
但是,如果我添加这样的代码,则栏和更改会正确显示。
Button b = new Button(this);
b.setText("change bar");
b.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
changeProg();
}
});
public void changeProg() {
switch (state) {
case 0: bar.setProgress(100); state = 1; break;
case 1: bar.setProgress(127); state = 2; break;
case 2: bar.setProgress(33); state = 0; break;
}
}
如果我尝试使用循环来自动调用changeProg()
,那么屏幕就会一直空白 - 没有任何小部件可以显示,无论是用XML描述还是按照编程方式都没有区别。
我无法理解为什么会出现这种行为。
答案 0 :(得分:1)
似乎你从UI线程调用Thread.sleep(2000)
,导致问题,甚至创建ANR。尝试创建一个新线程(单独的线程)来更改进度值。
请参阅以下示例:
答案 1 :(得分:1)
ProgressBar pdialog = new ProgressBar(context,null, android.R.attr.yourcustomstyle);
并以风格检查你的apptheme
答案 2 :(得分:0)
SetProgress提示:
将当前进度设置为指定值。如果进度条处于不确定模式,则不执行任何操作。
所以你必须打电话:
bar.setIndeterminate(假);
答案 3 :(得分:-3)
您是否尝试过查看此网站?
http://www.mkyong.com/android/android-progress-bar-example/
正确的方法是使用1个线程来运行耗时的任务,使用另一个线程来更新进度条状态
希望这有帮助!