1

我最初是用21(Lollipop)的minsdkversion寫了這個SSCCE,它工作的很好。 但我的需要是在前棒棒糖中使用VectorDrawableCompat在SSCCE中,XML佈局中有一個ImageView,其中圖像的來源是在res/drawable/目錄中定義的向量圖形。如何使用AppCompat庫中的VectorDrawableCompat?

最初,當在minsdkversion清單被設定爲21,我用android:src="@drawable/vector_circle"設置矢量圖形作爲圖像的在ImageView源。這工作得很好。

然後我在清單文件中將minsdkversion更改爲11。我還在XML佈局中將ImageViewandroid:src="@drawable/vector_circle"屬性更改爲app:srcCompat="@drawable/vector_circle"但我對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); 
    } 
} 

編輯:

我改變res/layout/activity_main.xmlImageView元件

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

我還添加layout-v21/activity_main.xmlres/目錄:

<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

預編譯錯誤消失了。但是當我在棒棒糖設備上運行應用程序時,矢量圖形繪製得非常好,但是如果我在預棒棒糖設備上運行應用程序,應用程序不會失敗,但矢量圖形根本不繪製。

+0

您是否看到[此問題](http://stackoverflow.com/questions/35645148/cant-use-srccompat-for-imageviews-in-android)?它可以幫助,檢查出來並寫出結果:) – Vucko

+0

@Vucko是的,正如你所看到的,我已經使用'app:srcCompat',而不是'android:srcCompat'。我也包含了'xmlns:app'命名空間。唯一不同的是,在他們的問題中,他們提到他們已經用'build.gradle'文件做了一些事情。我使用Eclipse,所以我沒有做任何事情,我只是在我的項目中包含了AppCompat-v7庫。 – Solace

+0

@Vucko此外,這不是一個lint錯誤。這是適當的錯誤(與Eclipse顯示紅色的undlerline和十字架),這使得項目失敗編譯 – Solace

回答

2

所有你需要做的就是使用可以處理app:srcCompat的小部件,那就是AppCompatImageView而不是ImageView

相關問題