如何在Android代码中使ProgressBar变为确定进度条?

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仍为true,并且进度条仍然显示不确定的圆圈。

如何使其变为确定性进度条?

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只是用来启用它而不是禁用它。
希望这可以帮到你...

你知道 Android 框架中有这样的风格吗? - AlikElzin-kilaka
@kilaka 我认为 android.R.style.Widget_ProgressBar_Horizontal 可以胜任这项工作... - ChD Computers
这还不够。我必须设置进度条的绘制:progressBar.setProgressDrawable(getResources().getDrawable(android.R.drawable.progress_horizontal)) - AlikElzin-kilaka
总结:indeterminateOnly默认设置为true,这会防止更改为确定的。这只能通过样式来更改,而样式仅在构造函数中设置。 - AlikElzin-kilaka
顺便提一下:你上面写的行号在不同的Android版本中可能会有所不同。你正在引用主分支。很多手机并不运行主分支,而是其中一个发布分支。此外,主分支可能会发生变化,你的行号将不再相关。 - AlikElzin-kilaka
显示剩余2条评论

1

看起来您没有设置ProgressBar的样式属性。从setIndeterminate()文档中可以得知:

如果此进度条的样式仅支持不确定模式(例如圆形进度条),则此属性将被忽略。

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


那么我该如何设置进度条的样式? - AlikElzin-kilaka
你可以在构造函数中设置它,像这样:https://dev59.com/KnA65IYBdhLWcg3w8zjt#3765577 - Geobits
更好的做法是使用 style="?android:progressBarStyleHorizontal" 来获取主题给定的样式。 - nmr

0

你的默认进度条样式将android:indeterminateOnly设置为true。因此,无法更改ProgressBar的不确定状态。 源代码。


那么我该如何使它确定呢? - AlikElzin-kilaka
你看过源代码吗?没有办法)在构造函数中使用正确的风格。@Geobits是正确的。 - Leonidos

-1

同时尝试使用 setProgress() 函数,该函数接受一个整数参数,范围从零到getMax()


已经尝试过了,没有奏效。你为什么认为这会起作用呢? - AlikElzin-kilaka

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