ÚLTIMA ATUALIZAÇÃO - Jun / 2019
A Biblioteca de Suporte mudou um pouco desde a resposta original. Agora, até mesmo o plug-in do Android para Gradle é capaz de gerar automaticamente o PNG no momento da construção. Portanto, a seguir estão duas novas abordagens que devem funcionar atualmente. Você pode encontrar mais informações aqui:
Geração PNG
O Gradle pode criar automaticamente imagens PNG de seus ativos no momento da construção. No entanto, nesta abordagem, nem todos os elementos xml são suportados . Esta solução é conveniente porque você não precisa alterar nada em seu código ou em seu build.gradle. Certifique-se de usar o Android Plugin 1.5.0 ou superior e o Android Studio 2.2 ou superior .
Estou usando essa solução no meu aplicativo e funciona bem. Nenhum sinalizador build.gradle adicional necessário. Nenhum hacks é necessário. Se você acessar / build / generated / res / pngs / ... poderá ver todos os PNGs gerados.
Portanto, se você tiver algum ícone simples (uma vez que nem todos os elementos xml são suportados), esta solução pode funcionar para você. Basta atualizar o Android Studio e o plug-in do Android para Gradle.
Biblioteca de Apoio
Provavelmente, esta é a solução que funcionará para você. Se você veio aqui, significa que o Android Studio não está gerando os PNGs automaticamente. Então, seu aplicativo está travando.
Ou talvez você não queira que o Android Studio gere nenhum PNG.
Diferentemente daquela "geração Auto-PNG" que suporta um subconjunto de elementos XML, esta solução suporta todas as tags xml. Portanto, você tem suporte total para seu drawable vetorial.
Você deve primeiro atualizar seu build.gradle para suportá-lo:
android {
defaultConfig {
// This flag will also prevents Android Studio from generating PNGs automatically
vectorDrawables.useSupportLibrary = true
}
}
dependencies {
// Use this for Support Library
implementation 'com.android.support:appcompat-v7:23.2.0' // OR HIGHER
// Use this for AndroidX
implementation 'androidx.appcompat:appcompat:1.1.0' // OR HIGHER
}
E então, use em app:srcCompat
vez de android:src
durante o carregamento VectorDrawables
. Não se esqueça disso.
Pois TextView
, se você estiver usando a androidx
versão da Biblioteca de Suporte, você pode usar app:drawableLeftCompat
(ou direita, parte superior, parte inferior) em vez deapp:drawableLeft
No caso de CheckBox
/ RadioButton
, use em app:buttonCompat
vez de android:button
.
Se você não estiver usando a androidx
versão da Biblioteca de Suporte e sua minSdkVersion
é 17
ou superior ou usando um botão, você pode tentar definir programaticamente via
Drawable icon = AppCompatResources.getDrawable(context, <drawable_id>);
textView.setCompoundDrawablesWithIntrinsicBounds(<leftIcon>,<topIcon>,<rightIcon>,<bottomIcon>);
ATUALIZAÇÃO - Jul / 2016
Eles reativaram o VectorDrawable na
Android Support Library 23.4.0
Para usuários AppCompat , nós adicionamos um opt-in API para reativar Support Vector Drawables de recursos (o comportamento encontrado em 23,2) via AppCompatDelegate.setCompatVectorFromResourcesEnabled (true) - mantenha em mente que este ainda pode causar problemas com o uso de memória e problemas ao atualizar instâncias de configuração, por isso é desabilitado por padrão.
Talvez , build.gradle
configuração é agora obsoleto e você só precisa habilitá-lo em atividades próprias (no entanto, necessidade de testar).
Agora, para habilitá-lo, você deve fazer:
public class MainActivity extends AppCompatActivity {
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
...
}
Resposta Original - Abr / 2016
Acho que isso está acontecendo porque o Support Vector foi desativado na última versão da biblioteca: 23.3.0
De acordo com este POST :
Para usuários do AppCompat, decidimos remover a funcionalidade que permite usar drawables vetoriais de recursos em dispositivos pré-Lollipop devido a problemas encontrados na implementação na versão 23.2.0 / 23.2.1 (ISSUE 205236) . O uso de app: srcCompat e setImageResource () continua a funcionar.
Se você visitar o problema ISSUE 205236 , parece que eles serão ativados no futuro, mas o problema de memória não será corrigido em breve:
Na próxima versão, adicionei uma API opcional onde você pode reativar o suporte VectorDrawable que foi removido. Ele vem com as mesmas ressalvas de antes (uso de memória e problemas com a atualização da configuração).
Eu tive uma questão semelhante. Portanto, no meu caso, reverti todos os ícones que usam drawable vetorial de recursos para imagens PNG novamente (já que o problema de memória continuará acontecendo mesmo depois de fornecerem uma opção para ativá-lo novamente).
Não tenho certeza se esta é a melhor opção, mas corrige todas as falhas na minha opinião.