Как изменить цвет progressbar android studio

Обновлено: 18.05.2024

Приведенные выше ответы меняют цвет фона целиком, и это приводит к тому, что высота индикатора хода выполнения меняется на максимальную, которую невозможно изменить в XML. лучший способ изменить только статус индикатора выполнения, если количество выполненного задания составляет 20% красного цвета, 50% желтого цвета 70% и выше зеленого цвета. Вы можете сделать это программно в Java. Поделитесь своим ответом, если у вас есть другое решение.

Я скопировал это из одного из моих приложений, так что есть несколько дополнительных атрибутов, но они должны дать вам идею. Это из макета, который имеет индикатор выполнения:

Затем создайте новый объект рисования с чем-то похожим на следующее (в данном случае greenprogress.xml ):

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

А также я удаляю этого андроида: indeterminate = "false" Пожалуйста, помогите мне. Я пытаюсь создать greenprogress.xml, скопировав ваш код, но Android Studio 0.4.6 помечает <layer-list> as и выдает ошибку "Element-list", что мне делать? Можно ли изменить цвет в зависимости от текущего значения прогресса, определенного на фактической панели? @ Райан Было бы полезно объяснить, что android:id="@android:id/progress" , android:id="@android:id/background" и android:id="@android:id/secondaryProgress" поддержать.

Более простое решение:

Этого достаточно для андроида: indeterminateTint = "@ color / white" для рычага API 21 и выше

Просто создайте стиль в values/styles.xml .

Затем установите этот стиль в качестве ProgressBar темы.

и не имеет значения, ваш индикатор прогресса является горизонтальным или круглым. Вот и все.

Ничего себе, самое простое решение, работает для меня. Я задавался вопросом, почему у этого ответа так много голосов.

Если вы хотите изменить только цвет индикатора выполнения, вы можете просто использовать цветной фильтр в методе onCreate () вашей деятельности:

Вам нужно сделать это только для версий перед леденцом на палочке. В Lollipop вы можете использовать атрибут стиля colorAccent.

Для SeekBar это то же самое, просто добавьте к API 16: seekBar.getThumb().setColorFilter(color, PorterDuff.Mode.SRC_IN); . Это изменит цвет этого круглого пальца. Вызов setColorFilter() на рисование напрямую будет применять цвет везде. Поскольку это то , что мне не нужно, я просто позвонил mutate() на Drawable (то есть как seekBar.getThumb().mutate().setColorFilter(color, PorterDuff.Mode.SRC_IN); Я видел это решение в другом месте, но все, что он делает (тестирование на устройстве Gingerbread), это поворачивает весь индикатор выполнения на один цвет, делая невозможным увидеть фактический прогресс @ NeilC.Обремски да, ты прав. Это может быть характерно для ПЗУ или версии. Я должен был удалить это вообще. Надеюсь, мы скоро перенесем это на более старые версии Android (через поддержку lib).

для API уровня 21 или выше просто используйте

Есть 3 способа решить этот вопрос:

  1. Как правильно настроить цвет индикатора выполнения
  2. Как программно настроить цвет индикатора выполнения, но выбрать цвет из различных предопределенных цветов, объявленных до компиляции
  3. Как настроить цвет индикатора выполнения программно, а также создать цвет программно.

Так или иначе, Райан отлично отвечает на вопрос № 1, а Штарке отвечает на большинство вопросов № 3, но для тех, кто ищет полное решение для № 2 и № 3:

Как программно настроить цвет индикатора выполнения, но выбрать цвет из предварительно определенного цвета, объявленного в XML

res / drawable / my_progressbar.xml :

Создайте этот файл, но измените цвета в my_progress и my_secondsProgress:

(ПРИМЕЧАНИЕ. Это просто копия фактического файла XML, определяющего SDK ProgressBar по умолчанию для Android, но я изменил идентификаторы и цвета. Оригинал называется progress_horizontal)

В вашей Java :

Как программно настроить цвет индикатора выполнения, а также создать цвет программно

РЕДАКТИРОВАТЬ: я нашел время, чтобы решить это правильно. Мой прежний ответ оставил это немного двусмысленным.

ProgressBar состоит из 3 Drawables в LayerDrawable.

  1. Слой 1 является фоном
  2. Слой 2 является вторичным цветом прогресса
  3. Слой 3 - основной цвет индикатора выполнения

В приведенном ниже примере я поменяю цвет основного индикатора на голубой.

Этот пример установил его на сплошной цвет. Вы можете установить его в градиентный цвет, заменив

Я использую горизонтальный индикатор выполнения в своем приложении Android, и я хочу изменить его цвет прогресса (который по умолчанию желтый). Как я могу это сделать, используя code (не XML)?

мне жаль, что это не ответ, но что движет требованием, устанавливающим его из кода ? И .setProgressDrawable должен работать, если он определен правильно

для горизонтального ProgressBar, вы можете использовать ColorFilter тоже вроде этого:

Red ProgressBar using color filter

Примечание: это изменяет внешний вид всех прогресс-баров в вашем приложении. Чтобы изменить только один определенный индикатор выполнения, сделайте следующее:

если progressBar является неопределенным, то используйте getIndeterminateDrawable() вместо getProgressDrawable() .

поскольку Lollipop (API 21) Вы можете установить прогресс оттенок:

Red ProgressBar using progress tint

для моего неопределенного progressbar (spinner) я просто установил цветовой фильтр на drawable. Отлично работает и только одна строка.

пример, где установка цвета в красный:

enter image description here

это не программно, но я думаю, что смогла бы помочь многим людям! Я много пробовал, и самым эффективным способом было добавить эти строки в мою ProgressBar .xml-файл:

Итак, в конце концов этот код сделал это для меня:

это решение работает для API 21+

это старый вопрос, но использование темы здесь не упоминается. Если ваша тема по умолчанию использует AppCompat ваш ProgressBar цвет будет colorAccent вы определили.

изменение colorAccent также изменить свой ProgressBar 'S цвет, но там изменения также отражает в нескольких местах. Итак, если вы хотите другой цвет только для определенного PregressBar вы можете сделать это, применив тему к этому ProgressBar :

расширить вашу тему по умолчанию, и переопределить colorAccent

и ProgressBar добавить :

так это будет выглядеть примерно так:

Итак, вы просто меняете colorAccent для вашего конкретного ProgressBar .

согласно некоторым предложениям, вы можете указать форму и clipdrawable с цветом, а затем установить его. У меня это работает программно. Вот как я это делаю..

сначала убедитесь, что вы импортируете библиотеку drawable..

затем используйте код, аналогичный приведенному ниже;

это сработало для меня:

В настоящее время в 2016 году я обнаружил, что некоторые устройства pre-Lollipop не соблюдают colorAccent настройка, поэтому мое окончательное решение для всех API теперь следующее:

для бонусных очков он не использует устаревший код. Попробуй!

нажмите ту же проблему при работе над изменением внешнего вида индикатора выполнения по умолчанию. Вот еще информация, которая, надеюсь, поможет людям:)

  • имя XML-файла должно содержать только символы: a-z0-9_. (т. е. никаких столиц!)
  • для ссылки на ваш "drawable" это R.drawable.filename
  • чтобы изменить внешний вид по умолчанию, вы используете myProgressBar.setProgressDrawable(. ) , однако вы не можете просто ссылаться на свой пользовательский макет как R.drawable.filename , вам нужно получить его как Drawable :
  • вам нужно установить стиль перед установкой прогресса / вторичного прогресса / max (установка его впоследствии для меня привела к "пустому" прогресс-бару)

вероятно, есть одна вещь, о которой не упоминалось в этом ответе:

если ваша тема наследуется от Theme.AppCompat , ProgressBar примет цвет, который вы определили как "colorAccent" в вашей теме.

..будет автоматически окрашивать цвет ProgressBar в @color/custom_color .

Как я это сделал в горизонтальной ProgressBar:

вы можете попробовать изменить свои стили, темы или использовать android: indeterminateTint= "@color / yourColor " в любом месте, но есть только один способ сделать это будет работать на любой версии Android SKD:

если индикатор выполнения не является неопределенным, используйте:

если индикатор выполнения не определен, используйте:

грустно, что Android такой беспорядок!

это решение сработало для меня:

простое решение если вы хотите изменить цвет в xml-файле макета, используйте приведенный ниже код и используйте indeterminateTint свойство для желаемого цвета.

вот что я сделал. Работал.

ProgressBar:

progressdrawable.XML-код:
здесь используйте градиент для изменения цвета, как вам нравится. И android: toDegrees=" X " increse значение X и progressbar быстро вращаются. Уменьшите и он вращается медленно.Подгоняйте согласно вашим потребностям.

enter image description here

пример:

еще одна мелочь, решение темы работает, если вы наследуете базовую тему, поэтому для App compact ваша тема должна быть:

а затем установите это в теме индикатора выполнения

для горизонтального стиля ProgressBar я использую:

пример вызова такой:

Если вам не нужен "вторичный прогресс", просто установите value2 в value1.

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

Я могу сказать, что есть (или, по крайней мере, был, на момент написания, когда я смотрел на эту текущую версию исходного кода Android) ошибка/проблема/оптимизация в ProgressBar код, который игнорирует попытку установить прогресс в значение это уже есть.

  • т. е. если progress = 45, и вы пытаетесь установить его в 45, код ничего не сделает, и не будет перерисовывать прогресс.

после вызова ProgressBar.setProgressDrawable() , ваш прогресс бар будет пустым (потому что вы изменили выигрышного часть).

это означает, что вам нужно установить прогресс и перерисовать его. Но если вы просто установите прогресс на сохраненное значение, он ничего не сделает.

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

  • сохранить" старое " значение прогресса
  • обновление drawable / цвет (делает бар пустой)
  • сбросить ход до 0 (в противном случае следующая строка ничего не делает)
  • сбросить прогресс до "старого" значения (исправляет бар)
  • недействительным

Ниже приведен метод, который у меня есть, что делает это-я надеюсь, что это полезно. Я не на 100% уверен, почему я позвонил из onResume() - это может быть важно или не связано:

что касается решения HappyEngineer, я думаю, что это был аналогичный обходной путь, чтобы вручную установить смещение "прогресс" (я точно не помню). В любом случае, приведенный выше код должен работать для вас.

Извините, если я не могу вспомнить все детали - вот почему я попытался отредактировать ответ. Надеюсь, это поможет.


Следуйте за нами на нашей фан-странице, чтобы получать уведомления каждый раз, когда появляются новые статьи. Facebook

1- Android ProgressBar

В Android, ProgressBar является компонентом интерфейса, который используется для отображения прогресса работы. Например скачивание (download) файла, или загрузки (upload) файла.

ProgressBar имеет несколько разных стилей определенные атрибутом style. В основном имеется 2 вида ProgressBar это:

  1. Spinning Wheel ProgressBar (Вращающееся колесо ProgressBar).
  2. Horizontal ProgressBar (Горизонтальный ProgressBar)

Помимо этого, ProgressBar поддерживает 2 режима (mode) процесса это Determinate (Определенный) и Indeterminate (Неопределенный).

Determinate mode (Определенный режим): Вам стоит использовать данный режим для ProgressBar если вы можете определить процент сделанной работы. Например, процент загруженного файла, число число записей вставленных в базу данных.


Режим по умолчанию у горизонтального ProgressBar это Determinate (Определенный).

Распространенные атрибуты использованные для ProgressBar в режиме Determinate (Определенный):

АтрибутОписание
minМинимальное значение ProgressBar. По умолчанию 0. Вы можете только определить другое значение для него, если вы используете API Level 26+ (Android 8.0+).
maxМаксимальное значение ProgressBar. По умолчанию 100.
progressВременное значение ProgresBar. По умолчанию 0.

Indeterminate mode (Неопределенный режим): Вам стоит использовать данный режим для ProgressBar если вы не можете определить процент совершенной работы.

2- ProgressBar Styles

ProgressBar имеет несколько разных стилей, определенные атрибутом style. По умолчанию ProgressBar имеет стиль "вращающегося колеса" (Spinning wheel).

На экране дизайна, вы можете перетащить ProgressBar в интерфейс, Android Studio генерирует (generate) XML код у ProgressBar со значением по умолчанию атрибута style.

Вы можете изменить значение атрибута style:

Ниже являются изображения Spinning Wheel ProgressBar с разными Style (стилями).

  • style="@android:style/Widget.DeviceDefault.Light.ProgressBar.Small"
  • style="@android:style/Widget.DeviceDefault.Light.ProgressBar.Small.Inverse"
  • style="@android:style/Widget.DeviceDefault.Light.ProgressBar.Large"
  • style="@android:style/Widget.DeviceDefault.Light.ProgressBar.Large.Inverse"
  • style="@android:style/Widget.ProgressBar.Large"
  • style="@android:style/Widget.ProgressBar.Large.Inverse"

Есть некоторые Style с другим названием, но вам будет трудно увидеть разницу в плане интерфейса. Например: Widget.ProgressBar.Large & Widget.ProgressBar.Large.Inverse.

  • Widget.ProgressBar.Large: Предназначен для размещения на темном фоне.
  • Widget.ProgressBar.Large.Inverse: Предназначен для размещения на светлом фоне.

Заметьте, что вы не увидите разницу при запуске приложения на Android Emulator (Эмулятор Android). Вы сможете увидеть разницу только при запуске приложения на хорошо отображающих устройствах.

  • style="?android:attr/progressBarStyleHorizontal" (Default of Horizontal ProgressBar)
  • style="@android:style/Widget.DeviceDefault.Light.ProgressBar.Horizontal"
  • style="@android:style/Widget.DeviceDefault.ProgressBar.Horizontal"
  • style="@android:style/Widget.Holo.Light.ProgressBar.Horizontal"
  • style="@android:style/Widget.Material.Light.ProgressBar.Horizontal"
  • style="@android:style/Widget.Holo.ProgressBar.Horizontal"
  • style="@android:style/Widget.Material.Light.ProgressBar.Horizontal"
  • style="@android:style/Widget.ProgressBar.Horizontal"


3- Пример: ProgressBar (Thread, Handler)

В данном примеере я создам 2 горизонтальных ProgressBar.

  1. Первый ProgressBar настроен с Determinate mode (Определенным режимом), он отображете прогресс, процен завершенной работы которого вы можете отобразить.
  2. Второй ProgressBar настроен с Indeterminate mode (Неопределенным режимом), он отображете прогресс, процен завершенной работы которого вы не можете отобразить.

В данном примере я использую Thread для выполнения работы, например скачивание файла, обновление записей в базе данных. И использую Handler​​​​​​​, чтобы обновить информацию на интерфейсе.

Я использую горизонтальный индикатор выполнения в приложении для Android, и я хочу изменить его цвет выполнения (по умолчанию это желтый). Как это сделать, используя code (не XML)?

ОТВЕТЫ

Ответ 1

Мне жаль, что это не ответ, но что заставило его установить его из кода? И .setProgressDrawable должен работать, если он правильно определен

Ответ 2

Для горизонтального ProgressBar вы также можете использовать ColorFilter следующим образом:

Red ProgressBar using color filter

Примечание. Это изменяет внешний вид всех индикаторов выполнения вашего приложения. Чтобы изменить только один конкретный индикатор выполнения, выполните следующие действия:

Если progressBar является неопределенным, используйте getIndeterminateDrawable() вместо getProgressDrawable() .

Начиная с Lollipop (API 21) вы можете установить оттенок выполнения:

Red ProgressBar using progress tint

Ответ 3

Это не программно, но я думаю, что это может помочь многим людям в любом случае.
Я много пробовал, и самым эффективным способом было добавить эти строки в мой ProgressBar в .xml файле:

В итоге этот код сделал это для меня:

Это решение работает для API 21+

Ответ 4

Для моего неопределенного progressbar (spinner) я просто установил цветной фильтр на drawable. Отлично работает и только одна строка.

Пример настройки цвета на красный:

enter image description here

Ответ 5

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

Изменение colorAccent также изменит цвет ProgressBar , но изменения также отражаются в нескольких местах. Итак, если вы хотите другой цвет только для определенного PregressBar , вы можете сделать это, применив тему к этому ProgressBar :

Расширьте тему по умолчанию и переопределите colorAccent

И в ProgressBar добавьте атрибут android:theme :

Итак, это будет выглядеть примерно так:

Итак, вы просто меняете colorAccent для своего конкретного ProgressBar .

Ответ 6

Все API

если использовать все API, просто создайте тему в стиле

и использование в процессе

Уровень API 21 и выше

если используется в API уровня 21 и выше, просто используйте этот код:

Ответ 7

в соответствии с некоторыми из предложений, вы можете указать форму и clipdrawable с цветом, а затем установить его. У меня это работает программно. Вот как я это делаю.

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

Затем используйте код, похожий на ниже:

Ответ 8

Это сработало для меня:

Ответ 9

Ответ 10

В настоящее время в 2016 году я обнаружил, что некоторые устройства pre-Lollipop не соблюдают настройку colorAccent , поэтому мое окончательное решение для всех API теперь выглядит следующим образом:

Для бонусных очков он не использует устаревший код. Попробуйте!

Ответ 11

Это то, что я сделал. Работал.

Индикатор:

progressdrawable.xml:
Здесь используйте градиент, чтобы изменить цвет по своему усмотрению. И андроид: toDegrees = "X" increse значение X и progressbar быстро вращаются. Уменьшите и поверните медленно. Настройте в соответствии с вашими потребностями.

enter image description here

образец:

Ответ 12

Ударьте ту же проблему во время работы над изменением внешнего вида/состояния индикатора выполнения по умолчанию. Вот еще информация, которая, надеюсь, поможет людям:)

  • Имя xml файла должно содержать только символы: a-z0-9_. (т.е. без капиталов!)
  • Чтобы ссылаться на ваш "drawable", это R.drawable.filename
  • Чтобы переопределить внешний вид по умолчанию, вы используете myProgressBar.setProgressDrawable(. ) , однако вам не нужно просто ссылаться на свой собственный макет как R.drawable.filename , вам нужно получить его как Drawable :
  • Вам нужно установить стиль перед установкой прогресса/вторичного хода/макс (установка впоследствии для меня привела к "пустой" строке выполнения)

Ответ 13

Вероятно, есть одна вещь, на которую в этом ответе не упоминалось:

Если ваша тема наследуется от Theme.AppCompat , ProgressBar примет цвет, который вы определили как "colorAccent" в своей теме.

.. автоматически изменит цвет ProgressBar на @color/custom_color .

Ответ 14

Как я сделал это в горизонтальном ProgressBar:

Ответ 15

Вы можете попробовать изменить свои стили, темы или использовать андроид: indeterminateTint = "@color/yourColor" в любом месте, но только один способ сделать это будет работать в любой версии Android SKD:

Если вы выполняете настройку, это не является неопределенным, используйте:

Если вы выполняете настройку, то значение параметра не определено, используйте:

Печально, что Android такой беспорядок!

Ответ 16

Ответ 17

Простейшее решение, если вы хотите изменить цвет в XML файле макета, используйте приведенный ниже код и используйте свойство indeterminateTint для нужного цвета.

Ответ 18

Это решение работало для меня:

Ответ 19

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

И затем установите это в теме шага выполнения

Ответ 20

Написал, чтобы добавить информацию об ответе PaulieG, так как ateiob попросил меня кое-что объяснить.

Я могу сказать, что во время написания этой текущей версии исходного кода Android была (или, по крайней мере, была) ошибка/проблема/оптимизация в коде ProgressBar которая игнорирует попытку установить значение прогресса в значении это уже в.

  • то есть, если прогресс = 45, и вы пытаетесь установить его на 45, код ничего не будет делать и не будет перерисовывать прогресс.

После вызова ProgressBar.setProgressDrawable() ваш индикатор выполнения будет пустым (потому что вы изменили рисуемую часть).

Это означает, что вам нужно установить прогресс и перерисовать его. Но если вы просто установите прогресс в сохраненное значение, это ничего не изменит.

Сначала необходимо установить значение 0, затем снова "старое" значение, и полоса будет перерисована.

Итак, подведем итог:

  • сохранить "старое" значение прогресса
  • обновить рисование/цвет (делает панель пустой)
  • сбросить прогресс до 0 (иначе следующая строка ничего не делает)
  • сбросить прогресс до "старого" значения (панель исправлений)
  • аннулировать

Ниже у меня есть метод, который делает это:

Что касается решения HappyEngineer, я думаю, что это был похожий обходной путь, чтобы вручную установить смещение "прогресса". В любом случае приведенный выше код должен работать на вас.

Ответ 21

Ответ 22

Для горизонтального стиля ProgressBar я использую:

Если вам не нужен "вторичный прогресс", просто установите значение2 в значение1.

Ответ 23

Применить этот пользовательский стиль к строке выполнения.

введите описание изображения здесь

Используйте этот тип изображения для индикатора выполнения.

Для лучшего результата вы можете использовать несколько изображений прогресса. И, пожалуйста, не стесняйтесь использовать изображения, потому что сама платформа Android использует изображения для progressbar. Код извлекается из sdk:)

Ответ 24

В соответствии с предложенным Мухаммадом-адилом для SDK версии 21 и выше

в XML Работает для меня, достаточно легко.

Ответ 25

Вот код для изменения цвета ProgressBar программным путем.

Ответ 26

Ответ 27

Это помогло мне настроить собственный цвет, чтобы перейти через код. Надеюсь, что это поможет.

Ответ 28

Это так просто, используя attr, если вы имеете дело с многопользовательскими приложениями:

попробуйте следующим образом:

Объявить ниже атрибут attrs.xml

Вставьте под кодом в styles.xml

используйте индикатор выполнения, как показано ниже

Ответ 29

Горизонтальный стиль выполнения пользовательских материалов:

Читайте также: