web-dev-qa-db-ja.com

androidのImageViewsにsrcCompatを使用できません

Design Support Library 23.2を使用しています。私のGradleプラグインはバージョン1.5なので、これらの行をbuild.gradleに追加しました

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

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

here で指定されているとおり

ただし、imageviewにsrcCompat属性を使用できません。

<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)パッケージ 'Android'の属性 'srcCompat'のリソース識別子が見つかりません

私のGradleバージョンは1.5です。 srcCompatを使用するにはどうすればよいですか?

43
Neeraj

しない

Android:srcCompat="@drawable/wallpaper"

実行

app:srcCompat="@drawable/wallpaper"

そのままsrcCompat属性はAppCompatライブラリ内で実際に定義されています。

重要このために適切な名前空間を追加する必要があります。

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

重要

あなたがそれを取得しているのは、無視できる単なるリントエラーのようです。私は同じエラーを試してみましたが、正しく機能しています。

tools:ignore="MissingPrefix"を使用して、このエラーが一時的に表示されないようにすることができます。

112

多くの回答を1つの回答にまとめる:

<?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を使用します。

30
Micro

最初(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"

さあ。

11
Gark

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で定義された単一のベクターグラフィックに置き換えることができます。以前はLollipop以降のデバイスに限定されていましたが、VectorDrawableとAnimatedVectorDrawableの両方が、2つの新しいサポートライブラリsupport-vector-drawableとsupport-animated-vector-drawableで利用できるようになりました。

これを追加

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

Go ThroughSupport Vector Drawables

3
IntelliJ Amiya

まず最初に気をつけなければならないことがいくつかあります:

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

Simple ImageViewではベクター画像がサポートされていないため、常にAppCompatImageViewまたはButtonを使用してください

上記のすべての方法が機能しない場合は、使用します

public class App extends Application {

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

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

アクティビティを使用している場合は、AppCompatActivtyでアクティビティを拡張します

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

    setContentView(R.layout.activity_main);
  }
}

私はちょうど変更しました:

app:srcCompat="@drawable/wallpaper"

Android:src="@drawable/wallpaper"

これは私のために働いた。

3
vanquan223

Android:srcCompatを使用しています。 app:srcCompat名前空間内ではなく、AppCompat内で定義された属性であるため、代わりにAndroid:を使用する必要があります。

1
ianhanniballake

使用しようとしている画像がPNG形式であることを確認してください。

画像をコピーします。

Android階層の1.Project TABのミップマップに移動します。

ミップマップを1回クリックしてから(Windowsではctrl + v)、写真に名前を付けるときは、小文字で記号がないことを確認してください。

写真は使用できるはずです。

イメージビューを設定します(一時的にフィラーカラーを使用する必要がある場合があります)。

ImageViewをクリックし、srcCompactをクリックします(ペイントブラシなしで@ mipmap/"Your pictures name"と入力します(この手順は属性タブにあります)

それはうまくいくはずです!

コンテンツの説明が必要な場合は、@ String/StringPictureを使用しました

0
Tyler

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

0
ErShani

From、 Androidデベロッパーサイト

このライブラリはv7 AppCompat libraryの依存関係になり、開発者とAppCompatがベクタードロウアブルを簡単に使用できるようになりました。

ImageButtonまたはImageView内でVectorDrawableCompatを使用するには、app:srcCompat XML属性またはsetImageResource()メソッドを使用します。

APIレベル20以下で属性IDを参照し続けるには、次のapptフラグをbuild、gradleファイルに追加します。

Gradle 1.5.0以前のAndroidプラグインでビルドしている場合、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"
  }
}

Gradle 2.0.0以降のAndroidプラグインを使用してビルドする場合は、build.gradleファイルに以下を追加します。

Android {
  defaultConfig {
    vectorDrawables.useSupportLibrary = true
  }
}
0
Amit Vaghela

追加する必要があります

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

レイアウトに合わせて機能します。 「app:srcCompat」は、追加するまで赤で強調表示されていました。

0