NAJNOWSZA AKTUALIZACJA - czerwiec / 2019
Biblioteka wsparcia zmieniła się nieco od czasu oryginalnej odpowiedzi. Teraz nawet wtyczka Android dla Gradle jest w stanie automatycznie generować PNG w czasie kompilacji. Tak więc poniżej są dwa nowe podejścia, które powinny działać w dzisiejszych czasach. Więcej informacji znajdziesz tutaj:
Generacja PNG
Gradle może automatycznie tworzyć obrazy PNG z Twoich zasobów podczas kompilacji. Jednak w tym podejściu nie wszystkie elementy XML są obsługiwane . To rozwiązanie jest wygodne, ponieważ nie musisz niczego zmieniać w kodzie ani w pliku build.gradle. Upewnij się tylko, że używasz wtyczki Android w wersji 1.5.0 lub nowszej i Android Studio 2.2 lub nowszej .
Używam tego rozwiązania w mojej aplikacji i działa dobrze. Nie jest wymagana dodatkowa flaga build.gradle . Żadne hacki nie są potrzebne. Jeśli przejdziesz do / build / generated / res / pngs / ... możesz zobaczyć wszystkie wygenerowane pliki PNG.
Tak więc, jeśli masz jakąś prostą ikonę (ponieważ nie wszystkie elementy xml są obsługiwane), to rozwiązanie może działać dla Ciebie. Po prostu zaktualizuj swoje Android Studio i wtyczkę Android dla Gradle.
Biblioteka wsparcia
Zapewne jest to rozwiązanie, które Ci się spodoba. Jeśli tu jesteś, oznacza to, że Twoje Android Studio nie generuje plików PNG automatycznie. Twoja aplikacja ulega awarii.
A może nie chcesz, aby Android Studio w ogóle generował pliki PNG.
W odróżnieniu od „automatycznego generowania PNG”, które obsługuje podzbiór elementów XML, to rozwiązanie obsługuje wszystkie znaczniki XML. Więc masz pełne wsparcie dla swojego wektora do rysowania.
Najpierw musisz zaktualizować plik build.gradle, aby go obsługiwał:
android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}
dependencies {
implementation 'com.android.support:appcompat-v7:23.2.0'
implementation 'androidx.appcompat:appcompat:1.1.0'
}
A następnie użyj app:srcCompat
zamiast android:src
podczas ładowania VectorDrawables
. Nie zapomnij o tym.
Dla TextView
jeśli używasz androidx
wersji biblioteki wsparcia, można użyć app:drawableLeftCompat
(lub w prawo, góra, dół) zamiastapp:drawableLeft
W przypadku CheckBox
/ RadioButton
, użyj app:buttonCompat
zamiast android:button
.
Jeśli nie używasz androidx
wersji Support Library, a Twoja wersja minSdkVersion
jest 17
lub nowsza lub używasz przycisku, możesz spróbować ustawić programowo za pomocą
Drawable icon = AppCompatResources.getDrawable(context, <drawable_id>);
textView.setCompoundDrawablesWithIntrinsicBounds(<leftIcon>,<topIcon>,<rightIcon>,<bottomIcon>);
AKTUALIZACJA - lipiec / 2016
Ponownie włączyli VectorDrawable w
bibliotece obsługi systemu Android 23.4.0
Dla użytkowników AppCompat dodaliśmy API opt-in, aby ponownie włączyć obsługę Vector Drawables z zasobów (zachowanie znalezione w 23.2) za pośrednictwem AppCompatDelegate.setCompatVectorFromResourcesEnabled (true) - pamiętaj, że nadal może to powodować problemy z wykorzystaniem pamięci i problemy z aktualizacją instancji konfiguracji, dlatego jest ona domyślnie wyłączona.
Być może , build.gradle
ustawienie jest teraz przestarzała i po prostu trzeba ją włączyć w odpowiednich działań (jednak trzeba przetestować).
Teraz, aby to włączyć, musisz:
public class MainActivity extends AppCompatActivity {
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
...
}
Oryginalna odpowiedź - kwiecień 2016 r
Myślę, że dzieje się tak, ponieważ Support Vector został wyłączony w najnowszej wersji biblioteki: 23.3.0
Według tego POST :
W przypadku użytkowników AppCompat zdecydowaliśmy się usunąć funkcjonalność, która pozwala na używanie elementów rysunkowych wektorowych z zasobów na urządzeniach sprzed wersji Lollipop z powodu problemów występujących w implementacji w wersji 23.2.0 / 23.2.1 (ISSUE 205236) . Korzystanie z aplikacji: srcCompat i setImageResource () nadal działa.
Jeśli odwiedzisz numer ISSUE 205236 , wydaje się, że w przyszłości się włączą , ale problem z pamięcią nie zostanie wkrótce rozwiązany:
W następnym wydaniu dodałem opt-in API, w którym można ponownie włączyć obsługę VectorDrawable, która została usunięta. Ma jednak te same zastrzeżenia, co poprzednio (zużycie pamięci i problemy z aktualizacją konfiguracji).
Miałem podobny problem. Tak więc w moim przypadku ponownie przywróciłem wszystkie ikony, które używają wektorów, które można narysować z zasobów, do obrazów PNG (ponieważ problem z pamięcią będzie się powtarzał nawet po udostępnieniu opcji ponownego włączenia).
Nie jestem pewien, czy to najlepsza opcja, ale moim zdaniem naprawia wszystkie awarie.