Как сделать 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()
,