Не могу использовать 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
эта библиотека теперь является зависимостью 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);
}
}