Support Library 23.2 にAppCompatと共に追加されたサポートベクタードロウアブルを使用していました。私は両方ともapp:srcCompat
およびStateListDrawable
内で、Android:drawableLeft
私のTextView。
AppCompatの23.3.0バージョンにアップグレードして以来、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
現在、サポートベクタードロウアブルが失敗する原因となった変更は何ですか?
Update:サポートライブラリ23で再度有効にします:
AppCompatユーザー向けに、オプトインAPIを追加して、AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)を介してリソースからのベクターDrawables(23.2で見つかった動作)のサポートを再度有効にしました。 -これにより、メモリ使用量の問題や構成インスタンスの更新の問題が発生する可能性があるため、デフォルトで無効になっている理由に留意してください。
チェック このリンク:23.4.0が利用可能になりました
--------------------------------------------- --------------
Android Support Library 23.3のリリース発表 :
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:srcCompat
_およびsetImageResource()
の使用は引き続き機能します。
したがって、これは予想される動作の変更です。 srcCompat
で処理されない場合は、ベクター以外のグラフィックを使用する必要があります。
API 21より前のベクターを引き続き使用したい場合は、行を削除できます
_vectorDrawables.useSupportLibrary = true
_
(または 23.2ブログ投稿 に示されている1.5 Gradleプラグインを使用している場合は、同等のもの)。
これにより、Android Studioは、API 21未満のデバイスでベクターを使用しているときにAPI 21未満のminSdkVersionを持つアプリのコンパイル時にPNGを生成し、_23.2.1
_と同じコードを保持できます。追加のAPKサイズを犠牲にして。
ロリポップ以前のVectorDrawableサポートはサポートライブラリ23.2.0に追加され、23.3.0で部分的に削除されました。 23.4.0以降(少なくとも25.1.0)では、削除された部分は元に戻りますが、オプションのフラグが付いています(価格が付いているため)。
要約すると、サポートライブラリ23.4.0から少なくとも25.1.0で、VectorDrawableを動作させることができます場合によっては。
この図 を助けました。
を使用せずにベクターを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の仕組みです