Android> = 5.0で作業する場合、
Drawable d = getResources().getDrawable(R.drawable.icon)
XMLを正しく解析し、有効なドローアブルを返します。しかし、新しい Vector Drawable Support Library (Version 23.4、Gradle 2.1.2)を使用すると、このコードはAndroid 4 。
Android.content.res.Resources $ NotFoundException
.。
原因:org.xmlpull.v1.XmlPullParserException:バイナリXMLファイルの行#2:無効なドローアブルタグベクトル
解決策は使用することです
Drawable d = VectorDrawableCompat.create(getResources(), R.drawable.icon, null);
ただし、リソースがベクターリソースでない場合、これはクラッシュします。
Java.io.FileNotFoundException:破損したXMLバイナリファイル
したがって、Android 4およびAndroid 6で、ベクトルおよび非ベクトルのドローアブルで機能するように、最初の行の代わりにどのコードを使用する必要がありますか?すべての状況で、この行はAndroid 5.0+プロジェクトで使用されましたか?サポートライブラリの記事には、この移行を実行する方法が記載されていません
次の方法を使用して、5.0より前のVectorDrawableのdrawableを取得できます。
Drawable drawable = AppCompatResources.getDrawable(mContext, mImageTitleResId);
私は解決策を見つけました。
アクティビティにサポートVectorDrawableを手動で追加する必要があります。
あなたの活動でこれを試してください:
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
詳細については、これを確認する必要があります ブログエントリ 。
私がこれまでに見つけた別の可能な解決策
ResourcesCompat.getDrawable(context.resources, resId, theme)
コンテキストはアクティビティである必要があります(ただし、アプリケーションコンテキストではありません)