Не могу использовать srcCompat для ImageViews в Android

Я использую библиотеку поддержки дизайна 23.2. Я добавил Эти линии в свою сборку.gradle как мой плагин Gradle-версия 1.5

defaultConfig {
        applicationId "com.abc.xyz"
        minSdkVersion 16
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
        generatedDensities = []
    } 

      aaptOptions {  
        additionalParameters "--no-version-vectors"  
      }  
     }

как указано в здесь

но я не могу использовать атрибут srcCompat для моего imageview.

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

где @drawable / wallpaper-это векторный файл ресурсов

<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"/>

Он говорит:

ошибка:(14) не найден идентификатор ресурса для атрибута 'srcCompat' в пакет 'андроид'

моя версия Gradle-1.5. Как я могу использовать srcCompat?

10 ответов


не

android:srcCompat="@drawable/wallpaper"

Do

app:srcCompat="@drawable/wallpaper"

как srcCompat атрибут фактически определен внутри совместимости приложений библиотека.

важно вы должны добавить соответствующее пространство имен для этого.

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

важно

что вы получаете, кажется как будто это просто ошибка lint, которая может быть игнорируемый. Я пробовал и ту же ошибку, но она работает правильно.

можно использовать tools:ignore="MissingPrefix" чтобы не видеть эту ошибку временно.


объединение многих ответов в один ответ:

<?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>

это работает для меня. Отсутствие ошибок корпии. Использовать AppCompatImageView.


первый (в 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"

поехали.


вызов 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

векторные чертежи позволяют заменить несколько png-активов на одиночная векторная графика, определенная в XML. Хотя ранее ограничивался Леденец и более высокие приборы, и VectorDrawable и AnimatedVectorDrawable теперь доступны через две новые поддержки Поддержка библиотек-vector-drawable и поддержка анимированных векторных рисунков.

добавить

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

вы заметите, что этот новый атрибут существует только в версии 2.0 плагина Gradle. Если вы используете 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"  
  }  
 }  

Пройти Поддержка Векторных Чертежей


Я только что изменил:

app:srcCompat="@drawable/wallpaper"

to

android:src="@drawable/wallpaper"

это работает для меня.


вы используете android:srcCompat. Он должен вместо app:srcCompat поскольку это атрибут, определенный в AppCompat, а не в android: пространство имен.


обновите плагин 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"  
     }  

согласно строкам guid блога разработчика google

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


С сайт разработчика Android

эта библиотека теперь является зависимостью v7 AppCompat library, позволяя разработчикам и AppCompat легко использовать векторные чертежи.

для использования VectorDrawableCompat в ImageButton или ImageView, используйте приложение: srccompat XML атрибут или setImageResource () метод.

чтобы продолжать ссылаться на идентификаторы атрибутов на уровне API 20 или ниже, добавьте следующий флаг appt в свою сборку, gradle файл:

Если вы строите с Android плагин для Gradle в 1.5.0 или ниже, добавьте в свою сборку следующее.файл 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 или выше, добавьте в свою сборку следующее.файл gradle:

android {
  defaultConfig {
    vectorDrawables.useSupportLibrary = true
  }
}

вы должны добавить

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

к вашему макету для его работы. Мое "приложение: srcCompat" было выделено красным цветом, пока я не добавил его.


есть несколько вещей, которые вы должны заботиться о Прежде всего используйте:

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 или кнопку, потому что векторное изображение не поддерживается простым ImageView

если все вышеперечисленные методы не сработали использовать

public class App extends Application {

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

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

если вы используете Activity, расширьте свою активность с помощью AppCompatActivty

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

    setContentView(R.layout.activity_main);
  }
}