以编程方式设置Android进度条样式

4

我正在尝试从主活动实例化一个进度条并动态地将其添加到视图中。 这样做时,我会得到一个进度条:

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描述还是通过编程方式描述的小部件都不显示,这个行为存在的原因让我感到困惑。
4个回答

1
ProgressBar pdialog = new ProgressBar(context,null, android.R.attr.yourcustomstyle);

并检查你的应用主题在样式中


1
似乎您在UI线程中调用了Thread.sleep(2000),这会导致问题,甚至可能引起ANR。尝试创建一个新的线程(单独的线程)来更改进度值。
请参见以下示例:

https://dev59.com/dWMm5IYBdhLWcg3wO9Ly#17758416


0

SetProgress提示:

将当前进度设置为指定值。如果进度条处于不确定模式,则不执行任何操作。

因此,您需要调用:

bar.setIndeterminate(false);


-3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接