Как изменить Android неопределенный цвет ProgressBar? - PullRequest
66 голосов
/ 14 апреля 2010

Я ищу очень очевидную вещь (на других языках !!), и это сводит меня с ума!

Я хотел бы знать, как я могу изменить неопределенный цвет ProgressBar с базового белого / серого цвета на черный? Когда я изменяю IndeterminateDrawable, я получаю статическое изображение вместо движущегося анимированного индикатора выполнения. Есть ли способ сделать это просто в XML?

Спасибо!

Ответы [ 8 ]

71 голосов
/ 05 апреля 2015
progressBar.getIndeterminateDrawable().setColorFilter(
            getResources().getColor(Your_Color),
            android.graphics.PorterDuff.Mode.SRC_IN);

и замените Your_Color на нужный цвет, например: R.color.your_color_code

64 голосов
/ 10 ноября 2010

Чтобы получить ProgressBar в теме по умолчанию, которая будет использоваться на белом / светлом фоне, используйте один из обратных стилей:

<ProgressBar style="@android:style/Widget.ProgressBar.Inverse"/>
<ProgressBar style="@android:style/Widget.ProgressBar.Large.Inverse"/>
<ProgressBar style="@android:style/Widget.ProgressBar.Small.Inverse"/>

Это обычно дает вам черный цвет на прозрачном ProgressBar, но некоторые установки ОС используют пользовательские ресурсы. Если вы ищете определенный цвет, вам придется свернуть свои собственные рисунки, следуя инструкциям, предоставленным CommonsWare.

20 голосов
/ 02 сентября 2016

Я вижу, что другие ответы довольно старые, чтобы изменить неопределенный цвет ProgressBar, вам нужно просто установить android:indeterminateTint и android:indeterminateTintMode атрибутов в вашем ProgressBar элемент непосредственно в XML:

<ProgressBar
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:indeterminateTint="@color/colorPrimary"
    android:indeterminateTintMode="src_in"
    android:indeterminate="true" />

android:indeterminateTint - оттенок, применяемый к неопределенному индикатору прогресса.

Должно быть значением цвета в виде "#rgb", "#argb", "#rrggbb", "#aarrggbb" или ссылкой на ресурс @color/colorPrimary.

android:indeterminateTintMode - Режим смешивания, используемый для применения оттенка индикатора прогресса.

Должно быть одним из следующих постоянных значений:
add, multiply, screen, src_atop, src_in или src_over

Методы получения и установки для этих атрибутов:

Все они были добавлены в Уровень API 21

11 голосов
/ 21 сентября 2011

Я делаю пример проекта и публикую в своем блоге. Пожалуйста, посмотрите. http://www.hrupin.com/2011/09/21/how-to-make-custom-indeterminate-progressbar-in-android-or-how-to-change-progressbar-style-or-color

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

7 голосов
/ 05 марта 2012
<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background" android:drawable="@drawable/bg" />
    <item android:id="@android:id/secondaryProgress" android:drawable="@drawable/secondary" />
    <item android:id="@android:id/progress" android:drawable="@drawable/progress" />
</layer-list>
2 голосов
/ 11 февраля 2018

Для API менее 23 используйте

progressBar.getIndeterminateDrawable().setColorFilter(
       getResources().getColor(Your_Color),
        android.graphics.PorterDuff.Mode.SRC_IN);

иначе используйте

progressBar.getIndeterminateDrawable().setColorFilter(
        ContextCompat.getColor(context, Your_Color),
        android.graphics.PorterDuff.Mode.SRC_IN);
0 голосов
/ 08 ноября 2018

Переопределите android:colorControlActivated в вашей AppTheme, которая должна быть в вашем styles.xml:

<style name="AppTheme" parent="...">
    ...
    <item name="android:colorControlActivated">@color/beautiful_color</item>
    ...
</style>

Работает по API 21 +

0 голосов
/ 28 октября 2010

на самом деле все, что вам нужно сделать (как для cirle, так и для bar), это создать xml-файл в drawable, как показано ниже ...... progress_spinner_001 указывает на любое изображение, которое вы хотите анимировать и продолжительность ... как долго вы хотите отображать каждый кадр для ....... и установите ваш андроид: indeterminateDrawable = filename_in_drawable ....

<?xml version="1.0" encoding="utf-8"?>
<animation-list
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
<item android:drawable="@drawable/progress_spinner_001" android:duration="300" />
<item android:drawable="@drawable/progress_spinner_002" android:duration="300" />
<item android:drawable="@drawable/progress_spinner_003" android:duration="300" />
  <item android:drawable="@drawable/progress_spinner_004" android:duration="300" />
    <item android:drawable="@drawable/progress_spinner_005" android:duration="300" />
      <item android:drawable="@drawable/progress_spinner_006" android:duration="300" />
     <item android:drawable="@drawable/progress_spinner_007" android:duration="300" />
    <item android:drawable="@drawable/progress_spinner_008" android:duration="300" />
</animation-list>

ps u, возможно, потребуется изменить размер индикатора выполнения, чтобы отобразить его по желанию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...