1

私は最初(Lollipop)のminsdkversionでこのSSCCEを書いて、うまくいきました。 しかし、私の必要性は、VectorDrawableCompatをロリポップ前に使うことです。 SSCCEには、XMLレイアウトにImageViewがあり、画像のソースはres/drawable/ディレクトリに定義されたベクターグラフィックです。 minsdkversionがマニフェストに21に設定した場合AppCompatライブラリのVectorDrawableCompatの使用方法は?

まず、IはImageViewにおける画像のソースとしてベクタ形式を設定するandroid:src="@drawable/vector_circle"を使用します。これはうまくいった。

次に、マニフェストファイルのminsdkversion11に変更しました。また、ImageViewandroid:src="@drawable/vector_circle"属性をapp:srcCompat="@drawable/vector_circle"というXMLレイアウトに変更しました。 しかし、私はapp:srcCompat="@drawable/vector_circle"ライン上

Unexpected namespace prefix "app" found for tag ImageView 

を取得しています。私はこれをどのように修正すべきですか?

SSCCE:

RES /描画可能/ vector_circle.xml:

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

    <group> 

     <path android:strokeColor="#2196F3" 
      android:strokeWidth="2" 
      android:pathData="M150,10 L75,200 L225,200 Z" /> 

    </group> 

</vector> 

activity_main:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="center" > 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     app:srcCompat="@drawable/vector_circle" /><!-- app:srcCompat="@drawable/vector_circle" --> 

</FrameLayout> 

MainActivity.java:

public class MainActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 
} 

EDIT:

私はまた、にlayout-v21/activity_main.xmlを添加

<ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     app:srcCompat="@drawable/vector_circle" 
     tools:ignore="MissingPrefix" /> 

res/layout/activity_main.xml年代ImageView要素を変更ディレクトリ:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="center" > 

    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/vector_circle" /><!-- app:srcCompat="@drawable/vector_circle" --> 

</FrameLayout> 

xmlns:tools="http://schemas.android.com/tools"FrameLayoutに要素を追加しました。

プレコンパイルエラーがなくなりました。しかし、私がLollipopデバイスでアプリを実行すると、ベクターグラフィックスは完全にうまく描画されますが、アプリをあらかじめロリポップデバイスで実行すると、アプリケーションは失敗しませんが、ベクターグラフィックはまったく描画されません。

+0

あなたは[この質問](http://stackoverflow.com/questions/35645148/cant-use-srccompat-for-imageviews-in-android)を見ましたか? – Vucko

+0

@Vuckoはい、ご覧のとおり、私は 'android:srcCompat'ではなく' app:srcCompat'を使っています。私は 'xmlns:app'名前空間も含めました。異なるのは、彼らの質問では、 'build.gradle'ファイルで何かをやったことがあるということだけです。私はEclipseを使用しているので、何もしなかったので、私はちょうど私のプロジェクトにAppCompat-v7ライブラリを含めました。 – Solace

+0

@Vuckoさらに、これは糸くずれのエラーではありません。プロジェクトをコンパイルできないようにするのは、適切なエラーです(Eclipseで赤色のアンダーラインとクロスが表示されます) – Solace

答えて

2

あなたがこの問題を解決するためにしなければならないすべてはapp:srcCompatを扱うことができるウィジェットを使用している、それはAppCompatImageView代わりのImageViewです。

関連する問題