9

我正在尝试在代码中添加进度条并使其确定:

progressBar = new ProgressBar(getActivity());
progressBar.setLayoutParams(layoutParams);
parent.addView(progressBar, index);
progressBar.setId(id.list_item_secondary);
progressBar.setProgressDrawable(getResources().getDrawable(drawable.progress_horizontal));
progressBar.setIndeterminate(false);
progressBar.setMax(100);

之后progressBar.setIndeterminate(false)isIndeterminate仍然为真,并且进度保持显示不确定的圆圈。

我怎样才能使它确定?

4

4 回答 4

2

这里的 ProgressBar 源代码,您正在调用的构造函数在第 237 行,它正在调用第 241 行中的构造函数,而后者又使用以下样式调用第 245 行中的构造函数:

com.android.internal.R.attr.progressBarStyle

此样式的 android:indeterminateOnly 属性默认设置为 true,因此您对 setIndeterminate 的调用将被忽略。请参阅第 433 行的函数描述。

我没有这样做,但我假设如果你像这样调用第 245 行的构造函数:

progressBar = new ProgressBar(getActivity(), null, <Your Style ID>);

将带有 android:indeterminateOnly 的样式定义作为第三个参数传递给 false 它应该可以工作。根据源代码,我假设 setIndeterminate 只是为了启用它而不是禁用它。

希望这可以帮助...

于 2013-07-22T15:41:10.883 回答
1

看起来您没有设置 ProgressBar 的样式属性。从文档setIndeterminate()

如果这个进度条的样式只支持不确定模式(比如圆形进度条),那么这个会被忽略。

您应该手动设置样式,例如通过style="@android:style/Widget.ProgressBar.Horizontal". 仅仅改变Drawable是不够的。

于 2013-07-22T15:19:49.593 回答
0

您的默认 ProgressBar 样式将 android:indeterminateOnly 设置为 true。所以你不能改变 ProgressBar 的不确定状态。源代码。

于 2013-07-22T15:34:47.730 回答
-1

也可以尝试使用setProgress(),它接受一个介于 0 和 之间的整数参数getMax()

于 2013-07-22T15:17:05.337 回答