不能在android中使用srcCompat for ImageViews

时间:2016-02-26 06:39:51

标签: android imageview androiddesignsupport

我正在使用设计支持库23.2。 我已经在build.gradle中添加了这些行,因为我的Gradle Plugin是版本1.5

<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:srcCompat="@drawable/wallpaper"/>

here

中指定

但我不能将srcCompat属性用于我的imageview。

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportWidth="24.0"
    android:viewportHeight="24.0">
<path
    android:fillColor="#FF000000"
    android:pathData="M4,4h7V2H4c-1.1,0 -2,0.9 -2,2v7h2V4zm6,9l-4,5h12l-3,-4 -2.03,2.71L10,13zm7,-4.5c0,-0.83 -0.67,-1.5 -1.5,-1.5S14,7.67 14,8.5s0.67,1.5 1.5,1.5S17,9.33 17,8.5zM20,2h-7v2h7v7h2V4c0,-1.1 -0.9,-2 -2,-2zm0,18h-7v2h7c1.1,0 2,-0.9 2,-2v-7h-2v7zM4,13H2v7c0,1.1 0.9,2 2,2h7v-2H4v-7z"/>

其中@ drawable / wallpaper是矢量资源文件

{{1}}

它说

  

错误:(14)找不到属性&#39; srcCompat&#39;的资源标识符。在   包&#39; android&#39;

我的Gradle版本是1.5。我怎样才能使用srcCompat?

12 个答案:

答案 0 :(得分:106)

不要

android:srcCompat="@drawable/wallpaper"

<强>不要

app:srcCompat="@drawable/wallpaper"

因为 srcCompat 属性实际上是在 AppCompat 库中定义的。

重要您需要为此添加适当的命名空间。

  

的xmlns:应用= “http://schemas.android.com/apk/res-auto”

重要

  

你得到的东西似乎只是一个lint错误   忽略。我尝试过并遇到同样的错误,但它确实有效   正确。

您可以使用tools:ignore="MissingPrefix"来避免暂时看到此错误。

答案 1 :(得分:28)

将许多答案合并为一个答案:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:background="@color/primary">


    <android.support.v7.widget.AppCompatImageView
        android:layout_width="300dp"
        android:layout_height="100dp"
        android:id="@+id/logoImageView"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        app:srcCompat="@drawable/my_logo_vector"
        android:tint="@color/white"
        />

</RelativeLayout>

这对我有用。没有lint错误。使用AppCompatImageView

答案 2 :(得分:10)

首先(在build.gradle中)

defaultConfig {
    vectorDrawables.useSupportLibrary = true
}

第二

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

第三

xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"

我们走了。

答案 3 :(得分:3)

致电app:srcCompat而非android:srcCompat

不要

android:srcCompat="@drawable/your_image"

<强> DO

app:srcCompat="@drawable/your_image"

<强>最后

    <ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:srcCompat="@drawable/wallpaper"/>

我的gradle版本是1.5

升级 Gradle版本

<强>解决方案

Gradle Plugin 2.0+  
com.android.tools.build:gradle:2.0.0-beta2
  

Vector drawables允许您用a替换多个png资源   单个矢量图形,以XML格式定义。虽然以前仅限于   棒棒糖和更高的设备,VectorDrawable和   AnimatedVectorDrawable现在可通过两个新的支持获得   图书馆支持矢量绘图和   支持动画向量抽拉。

添加此

    // Gradle Plugin 2.0+  
 android {  
   defaultConfig {  
     vectorDrawables.useSupportLibrary = true  
    }  
 } 

您会注意到此新属性仅存在于Gradle插件的2.0版本中。如果您使用的是Gradle 1.5,则可以使用

// Gradle Plugin 1.5  
 android {  
   defaultConfig {  
     generatedDensities = []  
  }  

  // This is handled for you by the 2.0+ Gradle Plugin  
  aaptOptions {  
    additionalParameters "--no-version-vectors"  
  }  
 }  

完成 Support Vector Drawables

答案 4 :(得分:2)

我刚改变了:

app:srcCompat="@drawable/wallpaper"

android:src="@drawable/wallpaper"

这对我有用。

答案 5 :(得分:2)

您需要关心的很多事情 首先使用:

defaultConfig {
            vectorDrawables.useSupportLibrary = true
        }

vectorDrawables {
        useSupportLibrary = true
    }

然后使用

 <android.support.v7.widget.AppCompatImageView
                android:id="@+id/changeLanguages"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:layout_alignParentTop="true"
                android:layout_centerHorizontal="true"
                android:adjustViewBounds="true"
                android:background="@color/transparent"
                android:scaleType="fitCenter"
                app:srcCompat="@drawable/ic_transfer" />

始终使用AppCompatImageView或Button,因为Simple ImageView不支持矢量图像

如果上述所有方法均无效,请使用

public class App extends Application {

  @Override public void onCreate() {
    super.onCreate();

    // Make sure we use vector drawables
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
  }
}

如果您使用的是Activity,请使用AppCompatActivty扩展您的Activity

public final class MainActivity extends AppCompatActivity {    
  @Override protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);
  }
}

答案 6 :(得分:1)

您正在使用android:srcCompat。它应该由app:srcCompat代替,因为它是在AppCompat中定义的属性,而不是在android:命名空间内。

答案 7 :(得分:1)

我知道来晚了,但可能会帮助别人。即使使用 app:SrcCompat ,我也遇到了同样的问题。花了很多时间后,我才发现这是由于可绘制对象引起的。通过将所有可绘制对象从drawable(v21)移至简单可绘制对象,可以简单地解决我的问题。

答案 8 :(得分:0)

将您的gradle插件更新为2.0 +

// Gradle Plugin 1.5  
android {  
     defaultConfig {  
          generatedDensities = []  
     }  

// This is handled for you by the 2.0+ Gradle Plugin  
     aaptOptions {  
          additionalParameters "--no-version-vectors"  
     }  

根据谷歌开发者的博客指南

http://android-developers.blogspot.in/2016/02/android-support-library-232.html

答案 9 :(得分:0)

来自,Android developer site

此库现在是v7 AppCompat library的依赖项,允许开发人员和AppCompat轻松使用矢量drawable。

要在ImageButton或ImageView中使用VectorDrawableCompat,使用app:srcCompat XML属性或setImageResource()方法。

要在API级别20或更低级别上引用属性ID,请将以下appt标志添加到构建gradle文件中:

如果您使用Android插件构建 Gradle 1.5.0或更低版本,请将以下内容添加到build.gradle文件中:

android {
  defaultConfig {
    // Stops the Gradle’s automatic rasterization of vectors
    generatedDensities = []
  }
   // Flag that tells aapt to keep the attribute ids
  aaptOptions {
    additionalParameters "--no-version-vectors"
  }
}

如果您使用Android插件构建 Gradle 2.0.0或更高版本,请将以下内容添加到build.gradle文件中:

android {
  defaultConfig {
    vectorDrawables.useSupportLibrary = true
  }
}

答案 10 :(得分:0)

你需要添加

的xmlns:应用= “http://schemas.android.com/apk/res-auto”

到你的布局工作。我的“app:srcCompat”以红色突出显示,直到我添加它。

答案 11 :(得分:0)

确保要使用的图片为PNG格式。

复制图片。

转到Android层次结构中1.Project TAB上的mipmap。

然后单击一次mipmap(在Windows Ctrl + v上),为照片命名时,请确保其小写字母且没有符号。

照片应该可用。

设置图像视图,(您可能必须暂时使用填充色)。

单击imageView,然后单击srcCompact(不带画笔的类型,然后在@ mipmap /“您的图片名称”上键入文字(此步骤位于属性标签中)

应该可以!

如果您需要内容描述,我只是使用@ String / StringPicture