Android change progressbar color

Как изменить цвет прогресс бара в Андроид

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

30 ответов

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

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

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

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

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

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

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

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

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

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

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

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

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

и ProgressBar добавить :

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

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

Примечание: используя style не будет работать. Вам нужно использовать android:theme только. Вы можете найти больше использования темы здесь: https://plus.google.com/u/0 / +AndroidDevelopers/посты/JXHKyhsWHAH

согласно некоторым предложениям, вы можете указать форму и 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 быстро вращаются. Уменьшите и он вращается медленно.Подгоняйте согласно вашим потребностям.

пример:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

Кастомизация ProgressBar в Android

Периодически возникает потребность заменить стандартный круговой ProgressBar на какой-либо свой.

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

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

Для кастомизации ProgressBar’a нужно выполнить несколько вполне тривиальных шагов:

1. Создать Android проект
2. Добавить в проект файл, содержащий loader (например res/drawable/loader1.png)
3. Создать файл анимации (например res/drawable/loader1_progress.xml)

  1. xml version =«1.0» encoding =«utf-8» ? >
  2. animated-rotate xmlns:android =«schemas.android.com/apk/res/android»
  3. android:drawable =»@drawable/loader1″
  4. android:pivotX =«50%»
  5. android:pivotY =«50%»/>

4. Разместить ProgressBar в Активити и сказать чтобы использовал наш ресурс анимации, созданный на предыдущем шаге (например res/layouts/)

  1. xml version =«1.0» encoding =«utf-8» ? >
  2. LinearLayout xmlns:android =«schemas.android.com/apk/res/android»
  3. android:layout_width =«fill_parent»
  4. android:layout_height =«fill_parent»
  5. android:orientation =«vertical» >
  6. ProgressBar
  7. android:indeterminateDrawable =»@drawable/loader1_progress»
  8. android:layout_height =«50dp»
  9. android:layout_width =«50dp» >
  10. ProgressBar >
  11. LinearLayout >

Кроме использования готовых изображений лоадеров, можно также использовать функционал android для создания лоадера вручную (например /res/drawable/custom_progress.xml)
Рассмотрим на примере фигуры кольца. Цвета указаны в формате #aarrggbb, где аа указывает значение альфа (прозрачность).

  1. xml version =«1.0» encoding =«utf-8» ? >
  2. animated-rotate xmlns:android =«schemas.android.com/apk/res/android»
  3. android:pivotX =«50%»
  4. android:pivotY =«50%» >
  5. shape android:shape =«ring»
  6. android:innerRadiusRatio =«5»
  7. android:thicknessRatio =«6»
  8. android:useLevel =«false» >
  9. gradient
  10. android:type =«sweep»
  11. android:useLevel =«false»
  12. android:centerY =«0.10»
  13. android:startColor =»#0020ffcc»
  14. android:centerColor =»#8820ffcc»
  15. android:endColor =»#ff20ffcc»/>
  16. size android:width =«18dip»
  17. android:height =«18dip»/>
  18. shape >
  19. animated-rotate >

Если у нас имеется несколько изображений одного ProgressBar

то можно воспользоваться следующим способом (например /res/drawable/custom_progress_blue.xml):

Источник

Как изменить цвет индикатора прогресса ProgressBar в Android

Я установил горизонтальный ProgressBar .

Я хотел бы изменить цвет прогресса на желтый.

Проблема в том, что цвет выполнения у разных устройств разный. Итак, я хочу, чтобы исправить цвет прогресса.

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

Читайте также:  Как сделать впн андроид

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

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

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

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

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

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

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

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

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

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

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

В частности, существует много путаницы вокруг # 2 и # 3, как видно из комментариев к ответу amfcosta. Этот ответ даст непредсказуемые цветовые результаты в любое время, когда вы захотите установить индикатор выполнения на что угодно, кроме основных цветов, так как он только изменяет цвет фона, а фактическая область «клипа» индикатора выполнения все равно будет наложена желтым цветом с уменьшенной непрозрачностью. Например, использование этого метода для установки темно-фиолетового фона приведет к тому, что индикатор выполнения «обрезает» какой-то сумасшедший розоватый цвет в результате смешивания темно-фиолетового и желтого цветов с помощью уменьшенного альфа-канала.

Так или иначе, Райан отлично отвечает на вопрос № 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

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

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

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

Если прогрессбар не определен, то используйте getIndeterminateDrawable() вместо getProgressDrawable() .

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

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

Ну и в конце этого кода сделал это за меня:

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

Я’м жаль, что это’s не ответ, но то, что’ов за рулем требование установив его из кода ? И `.setProgressDrawable должны работать, если это’ы правильно определить

Для моего неопределенного индикатора выполнения (блесны) я просто установить цветовой фильтр на холст. Прекрасно работает и только одну строку.

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

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

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

  • Расширьте вашу тему по умолчанию, и переопределить colorAccent
Читайте также:  Аудиоплеер для андроида самсунг

цвет@/белый прогресс добавить атрибут android:тема :

Так это будет выглядеть что-то вроде этого:

Так вы не просто изменение colorAccent для вашего конкретного прогресс .

Примечание: используя «стиль» не работает. Вы должны использовать Android:тема` только. Вы можете найти более использование тема здесь: https://plus.google.com/u/0/+AndroidDevelopers/должностей/JXHKyhsWHAH

Все API

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

и использовать в прогресс

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

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

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

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

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

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

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

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

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

Прогрессбар:

progressdrawable.xml: Здесь использовать градиент изменить цвет, как вам нравится. И Android:toDegrees=и»Х» и поднять значение X и ProgressBar быстро вращаться. Сокращение и его вращать медленно.Настроить в соответствии с вашими потребностями.

пример:

Нажмите с той же проблемой при работе по изменению выглядеть/чувствовать прогресс-бар по умолчанию. Вот еще некоторая информация, которая, надеюсь, поможет людям 🙂

  • Имя XML-файла должно содержать только символы: а-З0-9_. (т. е. нет в столицах!)
  • Ссылаться на вашу»мешочки &quot и; это Р. катры.именем`
  • Чтобы изменить внешний вид по умолчанию, вы используете переменная myprogressbar.setProgressDrawable(. ) , но вы’Т просто сослаться на свой пользовательский макет, как Р. холст.имя файла , вам нужно получить его как мешочки`: ресурсы ВИЭ = getResources(); переменная myprogressbar.setProgressDrawable(РЭС.getDrawable(Р. холст.именем);
  • Вам нужно установить стиль перед установкой прогресса/общее прогресс/Макс (настройка потом для меня вылилось в ‘пустой’ прогресс-бар)

Там’s наверное, никуда’т говорили на этот ответ:

Если ваша тема является наследование от темы.Совместимости приложений , прогресс будем считать цвет, который вы определили как»и colorAccent» в в вашей теме.

..будет оттенок цвета прогрессбар автоматически на @цвет/custom_color .

Вы можете попробовать изменить свои стили, темы, или с помощью Android:indeterminateTint=на»@Цвет/yourColor» в любом месте вы хотите, но там’s только один способ делать что будет работать на любом Android СКД версия:

Если прогресс-бар не индетерминантный, пожалуйста, используйте:

Если прогресс-бар не определена, пожалуйста, используйте:

Это’ы грустно, что Андроид-это такой бардак!

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

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

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

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

И тогда в ход Тема бар

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

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

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

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

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

Вы должны установить его до 0, потом на «Старый» снова стоимость, а в баре будет перерисовывать.

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

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

Насколько HappyEngineer’ы решение, я думаю, что это было аналогичное временное решение, чтобы вручную задать в «Прогресс» и смещение. В любом случае, приведенный выше код должен работать для вас.

Источник

Оцените статью