Android Studio obsługuje teraz zasoby wektorowe w wersjach 21+ i generuje pliki PNG dla niższych wersji w czasie kompilacji. Mam zasób wektorowy (z ikon materiałów), dla którego chcę zmienić kolor wypełnienia. Działa to na 21+, ale wygenerowane png nie zmieniają koloru. Czy jest na to sposób?
<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
musi być poandroid:src
drawableLeft
wButton
środku?Możesz to zrobić.
ALE nie możesz używać odniesień @color do kolorów (..lame), w przeciwnym razie będzie działać tylko dla L +
źródło
Jak powiedziano w innych odpowiedziach, nie edytuj bezpośrednio wektora do rysowania, zamiast tego możesz odcień w kodzie java, na przykład:
Dla uproszczenia stworzyłem klasę pomocniczą:
Aby użyć, wykonaj następujące czynności:
Lub:
źródło
Aby zmienić kolor obrazu wektorowego, możesz bezpośrednio użyć android: tint = "@ color / colorAccent"
Aby programowo zmienić kolor
źródło
getColor(ResId, Theme)
tak nie jest. Lub możesz użyć,ResourcesCompat.getColor(getResources(), R.color.primary, null);
jeśli nie dbasz o motyw… lub jeśli delegat kontekstu / polityki JEST działaniem, możesz to zrobićgetTheme()
dla tego ostatniego parametru.Obecnie działającym rozwiązaniem jest android: fillColor = "# FFFFFF"
Nic nie działało dla mnie poza twardym kodowaniem w wektorze
Jednak wypełnienie i tinta mogą wkrótce działać. Więcej informacji można znaleźć w tej dyskusji:
https://code.google.com/p/android/issues/detail?id=186431
Również kolory pozostają w pamięci podręcznej, więc usunięcie aplikacji dla wszystkich użytkowników może pomóc.
źródło
Android studio obsługuje teraz wektory pre-lollipop. Brak konwersji do formatu PNG. Nadal możesz zmienić kolor wypełnienia i będzie działać.
W swoim ImageView użyj
W pliku ocen
źródło
Aktualizacja:
AppCompat
wsparcieInne odpowiedzi podejrzewające, czy
android:tint
będą działać tylko na urządzeniach 21+, AppCompat ( wersja 23.2.0 i nowsze ) zapewnia teraz kompatybilną wstecz obsługę atrybutu tint.Tak więc, działaniem byłoby użycie
AppCompatImageView
iapp:srcCompat
(w przestrzeni nazw AppCompat) zamiastandroid:src
(przestrzeń nazw Androida).Oto przykład (AndroidX: to jest androidx.appcompat.widget.AppCompatImageView ;)):
I nie zapomnij włączyć obsługi grafiki wektorowej w Gradle:
źródło
AppCompatImageView
jest poniżejandroidx.appcompat.widget.AppCompatImageView
Dodaj tę bibliotekę do Gradle, aby umożliwić rysowanie wektorów kolorów na starych urządzeniach z Androidem.
i ponownie zsynchronizuj gradle. Myślę, że to rozwiąże problem.
źródło
Jeśli wektory nie pokazują indywidualnie ustawionych kolorów przy użyciu fillColor, mogą być ustawione na domyślny parametr widgetu.
Spróbuj dodać
app:itemIconTint="@color/lime"
do pliku activity_main.xml, aby ustawić domyślny typ koloru ikon widżetów.VectorDrawable @ developers.android
źródło
jeśli chcesz obsługiwać starszą wersję przed lolipopem
użyj tego samego kodu XML z pewnymi zmianami
zamiast normalnego
ImageView --> AppCompatImageView
zamiast
android:src --> app:srcCompat
oto przykład
nie zapomnij zaktualizować swojego gradle jako wzmianka @ Sayooj Valsan
Zauważ, że żadnemu wektorowi nie wolno nigdy podawać odniesienia do koloru takiego jak ten,
android:fillColor="@color/primary"
podając jego wartość szesnastkową.źródło
@color
dofillcolor
?Dla tych, którzy nie używają znaku
ImageView
, poniższe działały dla mnie na zwykłymView
(i dlatego zachowanie powinno się powielać na każdym rodzaju widoku)źródło