Estou usando uma barra de progresso horizontal no meu aplicativo Android e quero alterar sua cor de progresso (que é amarelo por padrão). Como posso fazer isso usando code
(não XML)?
android
android-progressbar
WhiteTigerK
fonte
fonte
android:indeterminateTint="@android:color/white"
funciona apenas na API> = 21Respostas:
Lamento que não seja a resposta, mas o que está impulsionando o requisito de defini-lo a partir do código? E
.setProgressDrawable
deve funcionar se estiver definido corretamentefonte
Para uma ProgressBar horizontal, você também pode usar um
ColorFilter
assim:Nota: isso modifica a aparência de todas as barras de progresso no seu aplicativo. Para modificar apenas uma barra de progresso específica, faça o seguinte:
Se progressBar for indeterminado, use em
getIndeterminateDrawable()
vez degetProgressDrawable()
.Desde o Lollipop (API 21), você pode definir um tom de progresso:
fonte
getIndeterminateDrawable
se você estiver usando progresso indeterminado.Isso não é programático, mas acho que poderia ajudar muitas pessoas de qualquer maneira.
Eu tentei muito e a maneira mais eficiente era adicionar essas linhas ao meu ProgressBar no arquivo .xml:
Então, no final, esse código fez isso por mim:
Esta solução funciona para API 21+
fonte
Para minha barra de progresso indeterminada (botão giratório), acabei de definir um filtro de cores no drawable. Funciona muito bem e apenas uma linha.
Exemplo onde definir cor para vermelho:
fonte
android.graphics.PorterDuff.Mode.MULTIPLY
paraPorterDuff.Mode.SRC_IN
e você obterá a cor hexadecimal exata.Esta é uma pergunta antiga, mas o uso do tema não é mencionado aqui. Se o seu tema padrão estiver em uso
AppCompat
, será a suaProgressBar
cor quecolorAccent
você definiu.Mudar
colorAccent
também mudará aProgressBar
cor da sua, mas também haverá reflexos em vários locais. Portanto, se você quiser uma cor diferente apenas para uma determinada,PregressBar
poderá fazer isso aplicando o tema a issoProgressBar
:Estenda seu tema padrão e substitua
colorAccent
E
ProgressBar
adicione oandroid:theme
atributo:Portanto, será algo parecido com isto:
Então você está apenas mudando um
colorAccent
para o seu particularProgressBar
.Nota : O uso
style
não funcionará. Você precisa usarandroid:theme
apenas. Você pode encontrar mais uso do tema aqui: https://plus.google.com/u/0/+AndroidDevelopers/posts/JXHKyhsWHAHfonte
All API
se usar toda API, basta criar o tema com estilo
style.xml
e uso em andamento
API nível 21 e superior
se usado no nível 21 da API e superior, basta usar este código:
fonte
de acordo com algumas das sugestões, você pode especificar uma forma e extraível com uma cor e defini-la. Eu tenho isso trabalhando programaticamente. É assim que eu faço ..
Primeiro, certifique-se de importar a biblioteca de desenho.
import android.graphics.drawable.*;
Em seguida, use o código semelhante ao abaixo;
fonte
progress.setLevel(2500)
não funciona para mim e, aparentemente, sua edição não foi aceita por algum motivo. Obrigado. +1.Isso funcionou para mim:
fonte
se indeterminado:
fonte
Isso funciona para mim. Também funciona para a versão inferior. Adicione isso ao seu syles.xml
E use-o assim em xml
fonte
parent="ThemeOverlay.AppCompat.Light"
Atualmente, em 2016, descobri que alguns dispositivos pré-pirulito não respeitam a
colorAccent
configuração, então minha solução final para todas as APIs agora é a seguinte:Para pontos de bônus, ele não usa nenhum código obsoleto. Tente!
fonte
wrapDrawable.mutate()
comDrawableCompat.setTint(wrapDrawable.mutate(), ContextCompat.getColor(getContext(), android.R.color.holo_green_light));
.xml
configurações e também se algo mais está substituindo aProgressBar
cor.Isto é o que eu fiz. Trabalhou.
Barra de progresso:
progressdrawable.xml:
use o gradiente para alterar a cor conforme desejar. E android: toDegrees = "X" aumenta o valor de X e a barra de progresso gira rapidamente. Diminua e gire lentamente. Personalize de acordo com suas necessidades.
amostra:
fonte
Bata no mesmo problema ao trabalhar na modificação da aparência da barra de progresso padrão. Aqui estão mais algumas informações que esperamos ajudar as pessoas :)
a-z0-9_.
(ou seja, sem maiúsculas!)R.drawable.filename
myProgressBar.setProgressDrawable(...)
, no entanto, você não pode apenas se referir ao seu layout personalizado comoR.drawable.filename
, é necessário recuperá-lo comoDrawable
:fonte
Provavelmente há uma coisa que não foi mencionada nesta resposta:
Se o seu tema for herdado
Theme.AppCompat
,ProgressBar
assumirá a cor que você definiu como"colorAccent"
no seu tema.Então, usando ..
..pintará a cor da ProgressBar automaticamente para a
@color/custom_color
.fonte
fonte
Você pode tentar alterar seus estilos, temas ou usar o android: indeterminateTint = "@ color / yourColor" onde quiser, mas há apenas uma maneira de fazer isso que funcionará em qualquer versão do Android SKD:
Se a barra de progresso não for indeterminada, use:
Se a barra de progresso for indeterminada, use:
É triste que o Android seja uma bagunça!
fonte
ProgressBar
, mas por determinado pinta escala inteira com cores.Como eu fiz isso na ProgressBar horizontal:
fonte
Solução mais simples, se você quiser alterar a cor no arquivo xml de layout, use o código abaixo e use a propriedade indeterminateTint para a cor desejada.
fonte
Esta solução funcionou para mim:
fonte
Mais uma coisa, a solução do tema funciona se você herdar um tema base; portanto, para o compact app, seu tema deve ser:
E então defina isso no tema da barra de progresso
fonte
Para alterar a cor horizontal da ProgressBar (em kotlin):
Para alterar a cor ProgressBar indeterminada:
E, finalmente, normalmente tinge o progresso pré-pirulito
fonte
Estilo de material personalizado da barra de progresso horizontal:
Para alterar a cor do plano de fundo e o progresso da barra de progresso horizontal.
Aplique-o à barra de progresso definindo o atributo style, para estilos de materiais personalizados e verificação de barra de progresso personalizada http://www.zoftino.com/android-progressbar-and-custom-progressbar-examples
fonte
Postado para adicionar informações sobre a resposta de PaulieG , já que ateiob me pediu para explicar uma coisa ...
Posso dizer que existe (ou pelo menos havia, no momento em que escrevi, quando olhei para a versão atual do código-fonte do Android) um bug / problema / otimização no
ProgressBar
código que ignora uma tentativa de definir o progresso como um valor já está em.Após a chamada
ProgressBar.setProgressDrawable()
, sua barra de progresso ficará em branco (porque você alterou a parte extraível).Isso significa que você precisa definir o progresso e redesenhá-lo. Mas se você apenas definir o progresso para um valor preservado, ele não fará nada.
Você deve defini-lo como 0 primeiro, depois com o valor "antigo" novamente e a barra será redesenhada.
Então, para resumir:
Abaixo está um método que tenho que faz isso:
Quanto à solução do HappyEngineer, acho que foi uma solução alternativa, definir manualmente o deslocamento do "progresso". Em qualquer um dos casos, o código acima deve funcionar para você.
fonte
Use o android.support.v4.graphics.drawable.DrawableCompat :
fonte
basta usar:
fonte
Para um estilo horizontal ProgressBar, eu uso:
Uma chamada de exemplo seria:
Se você não precisar do 'progresso secundário', basta definir valor2 como valor1.
fonte
Aplique esse estilo personalizado à barra de progresso.
@ drawable / progress.xml -
Use este tipo de imagem para a barra de progresso.
Para um melhor resultado, você pode usar várias imagens de progresso. E não hesite em usar imagens, porque a própria plataforma Android usa imagens para a barra de progresso. O código é extraído do sdk :)
fonte
Conforme muhammad-adil sugerido para SDK ver 21 e acima
no XML Works para mim, é fácil o suficiente.
fonte
Aqui está o código para alterar a cor do ProgressBar programaticamente.
fonte
fonte