最新の更新-2019年6月
サポートライブラリは、最初の回答から少し変更されています。これで、GradleのAndroidプラグインでも、ビルド時にPNGを自動的に生成できます。だから、以下は最近うまくいくはずの2つの新しいアプローチです。あなたはここでより多くの情報を見つけることができます:
PNG生成
Gradleは、ビルド時にアセットからPNG画像を自動的に作成できます。ただし、このアプローチでは、すべてのxml要素がサポートされるわけではありません。このソリューションは、コードやbuild.gradleで何も変更する必要がないため便利です。Androidプラグイン1.5.0以降とAndroid Studio 2.2以降を使用していることを確認してください。
私は自分のアプリでこのソリューションを使用しており、正常に動作します。追加のbuild.gradleフラグは必要ありません。ハックは必要ありません。あなたがに行く場合は/構築/生成/ RES / PNG画像は/ ...あなたはすべての生成されたPNG画像を見ることができます。
したがって、単純なアイコンがある場合(すべてのxml要素がサポートされているわけではないため)、この解決策が役立つことがあります。Android StudioとGradle用のAndroidプラグインを更新するだけです。
サポートライブラリ
おそらく、これはあなたのために働くソリューションです。ここに来た場合は、Android StudioがPNGを自動的に生成していないことを意味します。そのため、アプリがクラッシュしています。
あるいは、Android StudioでPNGをまったく生成したくない場合もあります。
XML要素のサブセットをサポートする「自動PNG生成」とは異なり、このソリューションはすべてのxmlタグをサポートします。したがって、ベクタードローアブルは完全にサポートされています。
最初に、それをサポートするようにbuild.gradleを更新する必要があります。
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
}
そして、読み込み中のapp:srcCompat
代わりにandroid:src
を使用しますVectorDrawables
。これをお忘れなく。
の場合TextView
、androidx
サポートライブラリのバージョンを使用している場合はapp:drawableLeftCompat
、代わりに(または右、上、下)を使用できます。app:drawableLeft
CheckBox
/の場合、の代わりにRadioButton
使用します。app:buttonCompat
android:button
androidx
Support Libraryのバージョンを使用しておらず、バージョンminSdkVersion
が17
それ以上の場合、またはボタンを使用している場合は、プログラムで設定してみてください。
Drawable icon = AppCompatResources.getDrawable(context, <drawable_id>);
textView.setCompoundDrawablesWithIntrinsicBounds(<leftIcon>,<topIcon>,<rightIcon>,<bottomIcon>);
更新-2016年7月
Androidサポートライブラリ23.4.0でVectorDrawableを再度有効にしました
AppCompatユーザー向けに、AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)を介して、リソースからのベクターDrawableのサポートを再度有効にするオプトイン APIを追加しました(23.2で見つかった動作)。これでもメモリ使用量と構成インスタンスの更新に問題があるため、デフォルトで無効になっている理由。
たぶん、build.gradle
設定は廃止され、適切なアクティビティで有効にする必要があります(ただし、テストする必要があります)。
これを有効にするには、次のことを行う必要があります。
public class MainActivity extends AppCompatActivity {
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
...
}
元の回答-2016年4月
これは、最新のライブラリバージョン23.3.0でサポートベクターが無効になっているために発生していると思います。
このPOSTによると:
AppCompatユーザーの場合、バージョン23.2.0 / 23.2.1 (ISSUE 205236)の実装で見つかった問題が原因で、Lollipop以前のデバイスのリソースからベクタードローアブルを使用できる機能を削除することにしました。app:srcCompatおよびsetImageResource()の使用は引き続き機能します。
問題ISSUE 205236にアクセスすると、将来的には有効になるようですが、メモリの問題はすぐには修正されません。
次のリリースでは、削除されたVectorDrawableサポートを再度有効にできるオプトインAPIを追加しました。ただし、以前と同じ警告(メモリ使用量と構成の更新に関する問題)が付属しています。
同様の問題がありました。したがって、私の場合、ベクタードローアブルを使用するすべてのアイコンをリソースからPNG画像に戻しました(メモリを再び有効にするオプションを提供した後でもメモリの問題が発生し続けるため)。
これが最良のオプションかどうかはわかりませんが、私の意見ではすべてのクラッシュが修正されます。