2016-04-07 18 views
28

私は、Support Library 23.2にAppCompatとともに追加されたサポートベクトルドロアブルを使用していました。私はapp:srcCompatStateListDrawableの両方でベクトルdrawablesを使用していましたので、私はTextViewにandroid:drawableLeftを使用することができました。AppCompat 23.3サポートベクターが機能しなくなりましたか?

23.3.0バージョンのAppCompatにアップグレードしたので、app:srcCompatのベクトルだけが動作しています。私が他の方法でそれを参照するときはいつでも

FATAL EXCEPTION: main 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.my.package.name/.MainActivity}: android.view.InflateException: Binary XML file line #8: Error inflating class Button 
... 
Caused by: android.view.InflateException: Binary XML file line #8: Error inflating class Button 
... 
Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #14: invalid drawable tag vector 
    at android.graphics.d 

何故私のサポートベクトルドロアブルが失敗する場合があるのですか?

+0

最終的に私はそれを得ません。私はベクトルを使用したい場合は、vectorDrawables.useSupportLibrary = trueを削除し、app:srcCompatまたはordinari android:src? – Kenji

+0

私の答えはこちらを参照してください:http://stackoverflow.com/a/37864531/3870932 –

答えて

38

更新:彼らは、サポートライブラリ23に再びそれを有効にします。
APPCOMPATユーザーの場合

は、我々はオプトインリソースからサポートベクトルドローアブルを再度有効にするAPI(行動を追加しました23.2で見つかる)via AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); - これにより、メモリ使用量やConfigurationインスタンスの更新に関する問題が発生する可能性があることに注意してください。デフォルトでは無効になっています。

チェックthis link: 23.4.0 available now
--------------------------------------- -------------------- release announcement for Android Support Library 23.3 1として

:APPCOMPATユーザーの場合

は、我々は機能を削除することを決定しましたバージョン23.2.0/23.2.1の実装で見つかった問題のため、Lollipop以前のデバイスのリソースからベクターのドロワブルを使用できます[https://code.google.com/p/android/issues/detail?id=205236,https://code.google.com/p/android/issues/detail?id=204708]。 app:srcCompatsetImageResource()を使用することは引き続き機能します。

これは予期される動作の変更です。 srcCompatで処理されない場合は、非ベクトルグラフィックスを使用する必要があります。

あなたは(23.2 blog postに示すように、あなたは1.5のGradleプラグインを使用している場合または同等の)あなたがライン

vectorDrawables.useSupportLibrary = true 

を削除することができます、前API 21にベクトルを使用し続けたい場合。

これにより、API 21以降のミニスカードを使用しているアプリのコンパイル時にPNGが生成され、23.2.1と同じコードを維持できるようになります。サイズ。

+1

私はandroid gradle Plugin 2.0.0で使用できますか? –

+0

@ArnavM。 Gradle Pluginのバージョンは何も変更されません(サポートベクターのドロウアブルを有効にする方法のみ) – ianhanniballake

+0

@IanLake InstantRunの機能にはgradle 2.1.0-alpha5が必要です..それにgeneratedDencitiesを使用することはできませんか? –

3

ベクトルをcompoundDrawables(例:TextViewのために)文書化され、高いメモリ使用量につながる

AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); 

を使用せずに、ただ

Drawable drawable = AppCompatResources.getDrawable(getContext(), R.drawable.vector_resID); 
if(drawable != null) drawable.setBounds(0, 0, iconSize, iconSize); 
TextViewCompat.setCompoundDrawablesRelative(textView, null, null, drawable, null); 

これはnavDrawerは事前ロリポップ用

13

VectorDrawableサポートはした動作方法であるを使用して、ベクターを膨らませますサポートライブラリ23.2.0に追加され、23.3.0で部分的に削除されました。 23.4.0以上(少なくとも25.1.0)では、削除された部分は戻ってきましたが、オプションのフラグの後ろにあります(これには価格が付いているため)。

要約すると:をサポートライブラリ23.4.0に少なくとも25.1.0に、あなたはVectorDrawableは、いくつかのケースを仕事を得ることができます。

私はthis diagramを手助けしました。

VectorDrawable cheatsheet

+1

それは甘い図です:) –

関連する問題