2016-07-23 5 views
4

私は同様の質問で利用可能な答えのほとんどを読んだが、何も私の問題無効な描画可能なタグのベクトル - APPCOMPAT-V7:OK 24.1.1

のGradle classpath 'com.android.tools.build:gradle:2.1.2'

android { 
    defaultConfig { 
     minSdkVersion 16 
     targetSdkVersion 24 
     vectorDrawables.useSupportLibrary = true 
    } 
} 

dependencies { 
    compile 'com.android.support:recyclerview-v7:24.1.1' 
    compile 'com.android.support:appcompat-v7:24.1.1' 
    compile 'com.android.support:cardview-v7:24.1.1' 
    compile 'com.android.support:support-v4:24.1.1' 
    compile 'com.android.support:design:24.1.1' 
} 

activity.xml

を固定していません

<?xml version="1.0" encoding="utf-8"?> 
<vector xmlns:android="http://schemas.android.com/apk/res/android" 
    android:width="24dp" 
    android:height="24dp" 
    android:viewportHeight="24" 
    android:viewportWidth="24"> 

    <path 
     android:fillColor="#5c5c5c" 
     android:pathData="M18.92 6.01C18.72 5.42 18.16 5 17.5 5h-11c-.66 0-1.21 .42 -1.42 1.01L3 12v8c0 
.55 .45 1 1 1h1c.55 0 1-.45 1-1v-1h12v1c0 .55 .45 1 1 1h1c.55 0 1-.45 
1-1v-8l-2.08-5.99zM6.5 16c-.83 0-1.5-.67-1.5-1.5S5.67 13 6.5 13s1.5 .67 1.5 
1.5S7.33 16 6.5 16zm11 0c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5 .67 1.5 
1.5-.67 1.5-1.5 1.5zM5 11l1.5-4.5h11L19 11H5z" /> 
    <path android:pathData="M0 0h24v24H0z" /> 
</vector> 
ic_car.xml
<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/ScrollView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".ViewItem" 
    tools:ignore="MissingPrefix"> 

    ... 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_column="0" 
     android:layout_gravity="center_vertical" 
     android:layout_marginBottom="10dp" 
     android:layout_marginLeft="5dp" 
     android:layout_marginRight="5dp" 
     android:layout_marginTop="10dp" 
     android:foregroundGravity="center_vertical|center|center_horizontal" 
     app:srcCompat="@drawable/ic_car" /> 

    ... 

</ScrollView> 

ベクトル

私の活動のクラスがAppCompatActivityを拡張し、すべてのandroid:srcタグがapp:srcCompatに変更されているが、それでも私は16に設定されているminSdkVersionInvalid drawable tag vectorエラーを参照してください。

+0

あなたは 'アンドロイドを使用してみました:代わりに'アプリのsrc':srcCompat'。 –

+0

@MuddassirAhmedはいもちろんありました – PYPL

+0

リリースバージョンまたはすべてのバージョンでのみ発生しますか? – lionscribe

答えて

0

問題は、私の場合はAndroidのスタジオに2.2

1

真実は、自分のコードを見ると、srcCompat属性だけを使用しているので、どのバージョンのライブラリでも動作するはずです。
あなたのベクトルはdrawable-21フォルダにありますが、通常のDrawableフォルダにはこれらのDrawableを参照する単一のファイルがあります。これは、ライブラリの初期のバージョンで行われた方法でしたが、以下の変更のためにもう動作しません。実際のベクターファイルをDrawableフォルダに移動するだけです。
ImageViewAppCompatImageViewに変更することによって解決された場合もあります。図書館はこれを自動的に行うはずですが、時にはそうではないようです。
ベクトルが複合画像の一部である場合、コードが壊れている可能性があります(たとえば、階層化された画像)。または、ImageButtonのleftImageとしてベクトルを設定しているなど、コードを投稿していない場所が壊れている可能性があります。 @Zekeが答えたように、これらの機能は23.3で削除されました。それにもかかわらず、それは23.4で返された、彼らはまだそれがメモリリークを引き起こす可能性を警告あなたの活動

static { 
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); 
} 

に次の追加することで使用可能と。 https://medium.com/@chrisbanes/appcompat-v23-2-age-of-the-vectors-91cbafa87c88#.s48hqaw1uを参照してください。ただし、最小限の使用で問題になることはありません。

簡単な回避策は、Drawableを作成してコードで設定することです。このようなもの;

Drawable icon = AppCompatDrawableManager.get().getDrawable(context, resVectorID); 
// Set it for example as a left image of button 
button.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null); 

私はこれをテストしておらず、メモリに問題があるかどうかは考えていません。誰かがフォローアップできるなら、それを愛するだろう。

+0

3つのことが必要です。 1) 'gradle'の' vectorDrawables.useSupportLibrary = true'; 2) 'static {AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); } 'アクティビティのレンダリングSVG; 3)ImageViewの 'android:src'ではなく' app:srcCompat'です。そのうちの1つが欠落していても、あなたのアプリがクラッシュすることはありません。 - 24.2.0現在 –

2

を更新した後に自分自身を解決してしまった、クラッシュが原因前ロリポップデバイス上のベクトル描画可能を取得するためにResources.getDrawable(int)を使用して起こりました。私は ImageView.setImageDrawable(Drawable)に渡すdrawableを作成しようとしていました。 Androidのサポートライブラリ23.3.0のよう

Google Blog Post for Android Support Library 23.2:

、サポートベクタードロワブルは だけのアプリを経由してロードすることができます。srcCompatまたはsetImageResource()。

ソリューション:VectorDrawableCompat.create(Resources, int, Theme)を使用してドロウアブルを作成してください。

ImageView.setImageResource(int)でも使用できますが、これはUIスレッドのビットマップを読み取り/デコードします。

0

私はこのようでした:

public static final Drawable getMyDrawable(Context context, int id) { 
    final int version = Build.VERSION.SDK_INT; 
    if (version >= 21) { 
     return ContextCompat.getDrawable(context, id); 
    } else { 
     return VectorDrawableCompat.create(context.getResources(), id, context.getTheme()); 
    } 
} 
関連する問題