Как сделать Android ProgressBar детерминированным в коде?

Я пытаюсь сделать прогрессбар в коде и сделать его определенным:

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 ответа

Решение

Из исходного кода 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 существует только для его включения, а не для его отключения.

Надеюсь это поможет...

Не похоже, что вы устанавливаете атрибут стиля ProgressBar. Из документов для setIndeterminate():

Если стиль этого индикатора выполнения поддерживает только неопределенный режим (например, круглые индикаторы выполнения), то это будет игнорироваться.

Вы должны вручную установить стиль, например, через style="@android:style/Widget.ProgressBar.Horizontal", Просто меняя Drawable не достаточно

Ваш стиль ProgressBar по умолчанию имеет android:indeterminateOnly установлен в true. Таким образом, вы не можете изменить неопределенное состояние ProgressBar. исходный код.

Попробуйте также использовать setProgress(), который принимает целочисленный аргумент от нуля до getMax(),

Другие вопросы по тегам