Подтвердить что ты не робот

Как изменить цвет круга ProgressBar по умолчанию на Android

В настоящее время я использую внешнюю библиотеку в проекте Android, импортированном через gradle.
Эта библиотека показывает панель уведомлений с кругом ProgressBar. Это код, который я нашел в нем:

<ProgressBar
            android:id="@+id/progress_bar"
            android:layout_height="match_parent"
            android:layout_marginBottom="4dp"
            android:layout_marginTop="4dp"
            style="@style/SuperActivityToast_Progress_ProgressBar"/>

Соответствующий стиль:

<style name="SuperActivityToast_Progress_ProgressBar" parent="android:Widget.Holo.ProgressBar">
    <item name="android:layout_width">32dp</item>
    <item name="android:layout_marginLeft">8dp</item>
</style>

Если я понимаю соответствие, цвет показанного круга получается из значения по умолчанию (зеленый на моем телефоне). Мне нужно его изменить!

Теперь я не могу изменить исходный код, и сама библиотека не предлагает мне возможность программно установить стиль.

Есть способ изменить стиль по умолчанию на уровне приложения или лучше переопределить этот особый стиль?

Спасибо Davide

4b9b3361

Ответ 1

После нескольких попыток я нашел решение:

ProgressBar progBar = (ProgressBar) context.getActivity().findViewById(R.id.progress_bar);
if (progBar != null) {
    progBar.setVisibility(View.VISIBLE);
    progBar.setIndeterminate(true);
    progBar.getIndeterminateDrawable().setColorFilter(0xFFFFFFFF, android.graphics.PorterDuff.Mode.MULTIPLY);
}

Просто я получаю ссылку на объект выполнения, созданный библиотекой, и я изменяю его атрибуты. (в моей деятельности я должен сделать это в методе OnStart, иначе это будет null) Самая важная часть - "setColorFilter", которые делают магию.

Ответ 2

Если вы используете тему AppCompat, она использует accentColor, чтобы повернуть круг.

Если вы хотите портировать его на другой цвет, чем на тему, вам следует рассмотреть возможность использования ThemeOverylay. Например. Если вы хотите сделать круговой оттенок red, вы можете сделать следующее:

в styles.xml

<style name="RedAccent" parent="ThemeOverlay.AppCompat.Light">
    <item name="colorAccent">#F00</item>
</style>

в ProgressBar, установите тему RedAccent.

<ProgressBar
            android:id="@+id/progress_bar"
            android:layout_width="32dp"
            android:layout_height="32dp"
            android:theme="@style/RedAccent"/>

И ваш круг теперь будет красного цвета!

Ответ 3

Для будущих ссылок это изменение сработало для меня:

Изменение colorControlActivated в AppTheme в файле values /styles.xml:

 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Main theme colors -->
    ....
    <!-- Color for circle in progress bar -->
    <item name="colorControlActivated">#DC0808</item>
</style>

При таком подходе вам не нужно выполнять никаких действий с вашим тегом <ProgressBar/> в вашем XML файле.

Ответ 4

Просто добавьте цвет в ProgressBar, как показано ниже:

    <ProgressBar
    android:id="@+id/progressbar"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:visibility="gone"
    android:indeterminateTint="@color/colorPrimary"  // add color here
    android:layout_centerVertical="true"/>