O Android Studio agora suporta recursos vetoriais com mais de 21 anos e gera pngs para versões inferiores em tempo de compilação. Eu tenho um ativo de vetor (dos Ícones dos materiais) que desejo alterar a cor do preenchimento. Isso funciona com mais de 21 anos, mas os pngs gerados não mudam de cor. Existe uma maneira de fazer isso?
<vector android:height="48dp" android:viewportHeight="24.0"
android:viewportWidth="24.0" android:width="48dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@color/primary" android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z"/>
android:tint
deve ser depois deandroid:src
drawableLeft
emButton
?Você consegue.
MAS você não pode usar referências @color para cores (..lame), caso contrário, funcionará apenas para L +
fonte
Como dito em outras respostas, não edite o vetor desenhável diretamente, você pode pintar o código java, assim:
E por uma questão de simplicidade, criei uma classe auxiliar:
Para usar, faça o seguinte:
Ou:
fonte
Para alterar a cor da imagem vetorial, você pode usar diretamente o android: tint = "@ color / colorAccent"
Para mudar de cor programaticamente
fonte
getColor(ResId, Theme)
não está. Ou você pode usarResourcesCompat.getColor(getResources(), R.color.primary, null);
se não se importa com o tema ... ou se o seu contexto / política delegar É uma atividade, você pode fazergetTheme()
para esse último parâmetro.Atualmente, a solução de trabalho é o android: fillColor = "# FFFFFF"
Nada funcionou para mim, exceto a codificação embutida no vetor
No entanto, cor de preenchimento e tonalidade podem funcionar em breve. Consulte esta discussão para obter mais informações:
https://code.google.com/p/android/issues/detail?id=186431
Além disso, as cores podem ficar no cache, portanto, a exclusão de aplicativos para todos os usuários pode ajudar.
fonte
O estúdio Android agora suporta vetores pré-pirulito. Nenhuma conversão PNG. Você ainda pode alterar a cor do preenchimento e ele funcionará.
No seu ImageView, use
No seu arquivo de notas,
fonte
Atualização:
AppCompat
suporteOutras respostas suspeitando se
android:tint
funcionará apenas em mais de 21 dispositivos, o AppCompat ( v23.2.0 e superior ) agora fornece um tratamento compatível com versões anteriores do atributo tint.Portanto, o curso de ação seria usar
AppCompatImageView
eapp:srcCompat
(no espaço de nome AppCompat) em vez deandroid:src
(espaço de nome do Android).Aqui está um exemplo (AndroidX: Este é androidx.appcompat.widget.AppCompatImageView ;)):
E não se esqueça de ativar o suporte para desenho vetorial no gradle:
fonte
AppCompatImageView
está sobandroidx.appcompat.widget.AppCompatImageView
Adicione esta biblioteca ao Gradle para ativar o vetor de cores desenhável nos antigos dispositivos Android.
e sincronize novamente o gradle. Eu acho que vai resolver o problema.
fonte
Se os vetores não estiverem mostrando cores definidas individualmente usando fillColor, eles poderão estar sendo configurados para um parâmetro de widget padrão.
Tente adicionar
app:itemIconTint="@color/lime"
ao activity_main.xml para definir um tipo de cor padrão para os ícones do widget.VectorDrawable @ developers.android
fonte
se você olhar para apoiar a versão antiga pré lolipop
use o mesmo código xml com algumas alterações
em vez de normal
ImageView --> AppCompatImageView
ao invés de
android:src --> app:srcCompat
aqui está um exemplo
não se esqueça de atualizar seu gradle como @ Sayooj Valsan mencionar
Aviso Para qualquer um dos vetores, nunca forneça nunca sua referência de vetor a cores como esta,
android:fillColor="@color/primary"
forneça seu valor hexadecimal.fonte
@color
parafillcolor
?Para aqueles que não usam um
ImageView
, o seguinte funcionou para mim de maneira simplesView
(e, portanto, o comportamento deve se replicar em qualquer tipo de exibição)fonte