AndroidのレイアウトXMLにおけるapp:srcCompatとandroid:srcの違い


138

Android Studioのベクターアセットを使用してアイコンが追加されたImageViewを作成するたびに、行でエラーが発生します app:srcCompat="@drawable/ic_play"

app:srcCompatwith を変更するとandroid:src、エラーはなくなりましたが、アイコンがピクセル化されています。

主な違いは何ですか

app:srcCompat="@drawable/ic_play"

そして

android:src="@drawable/ic_play"

回答:


139

app:srcCompat

ベクトルドローアブルをアプリに統合する最も簡単な方法です。ベクトルドローアブルを使用すると、複数のpngアセットを、XMLで定義された単一のベクトルグラフィックに置き換えることができます。以前はLollipop以上のデバイスに限定されていましたが

注意

とおりAndroidのサポートライブラリ23.3.0サポートベクタードロワブルは、のみを介してロードすることができますapp:srcCompat

vectorDrawables.useSupportLibrary = truebuild.gradleファイルに追加する必要があります

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

android:src

このImageViewのコンテンツとしてドローアブルを設定します。元のサイズで表示されます。自動スケーリングなし。


2
GradleアプリモジュールでvectorDrawables.useSupportLibrary = trueを追加すると、app:srcCompactのエラーがなくなる
Zayid Mohammed

3
app:srcCompatは古いAndroidバージョンと競合しますか?より具体的には、Api 19は私が言及している最も古いバージョンです。
曖昧

Wowは最終的にビットマップアイコンを取り除くことができます。
ニャー猫2012年

Googleプラスの投稿リンクが
Vadim Kotov

上記にを追加しましたがbuild.gradle、まだ機能していません。
David Callanan

20

build.gradleファイルandroid:src="@drawable/some_vector"なしvectorDrawables.useSupportLibrary = trueで使用していて、アプリにベクター画像(ベクタードローアブル)がある場合、apkファイルの作成中にAndroid gradleプラグインはさまざまな画面(hdpi、xhdpi ...)の多数の* .pngファイルを生成しますそれぞれのベクタードローアブル(API = <19の場合のみ)。結果-apkのサイズが大きくなります。

使用している場合app:srcCompat="@drawable/some_vector"vectorDrawables.useSupportLibrary = true発生することなく、Androidの用途ベクトル描画可能ファイル*.pngのファイルを。

これは、Android Studio APK分析ツールで確認できます。あり、なしでapkをビルドするだけvectorDrawables.useSupportLibrary = trueです。

これが主な違いだと思います。


したがって、useSupportLibraryをtrueに設定している場合、android:src =ではなく、なぜ特別な構文が必要なのですか?useSupportLibraryをアクティブにしてandroid:src =を使用する場合、PNGの急増を回避しますか?
オスカー

9

使用する:

app:srcCompat="@drawable/backImage"

srcCompat属性は、実際にはAppCompatライブラリ内で定義されています。重要:これには適切な名前空間を追加する必要があります。

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

注意

取得しているのは、無視できるlintエラーのようです。同じエラーが発生しましたが、正常に機能しています。

使用できます tools:ignore="MissingPrefix"一時的にこのエラーが表示されないするために。

これがお役に立てば幸いです。


5

使用しているときAppCompatImageView(またはサブクラスなどImageButtonFloatingActionButton)、あなたは新しい使用することができますapp:srcCompat(に利用可能な他の描画可能だけでなく、プラットフォームの旧バージョンの参照ベクトルドローアブルに属性をandroid:src

android.support.v7.appcompat.R.attr.srcCompat

srcCompat

このImageViewのコンテンツとしてドローアブルを設定します。古いバージョンのプラットフォームで実行するときにベクタードローアブルを使用できます。

フォーム内の別のリソースへの参照、"@[+][package:]type/name"またはフォーム内のテーマ属性の場合があり"?[package:]type/name"ます。


xmlns:app="http://schemas.android.com/apk/res-auto"使用時に追加することを忘れないでくださいapp:srcCompat


4

ベクトルとアニメーションベクトルは、フレームワークの最新バージョンでのみサポートされていました。srcCompatを互換性ライブラリで使用して機能させることができますが、これはサポートライブラリの特定のビューでのみ機能します。app:がandroid:の代わりに使用されていることに注意してください。これは、フレームワークの一部ではなく、アプリによって定義されたパラメーターを意味します。


3
app:srcCompat="some_resource" 

サポートライブラリに含まれるのはAppCompatActivity srcであるということです

android:src="some_resource"

単純な活動を指します。


3

使用しているときAppCompatImageView(またはサブクラスなどImageButtonFloatingActionButton)、あなたは新しい使用することができますapp:srcCompat参照ベクトルドロワブルに属性(同様に利用可能な他の描画可能にandroid:src)。実行時にドローアブルを変更する場合はsetImageResource()、以前と同じメソッドを使用できます(変更はありません)。

AppCompatおよびを使用するとapp:srcCompat、ベクタードローアブルをアプリに統合する最も簡単な方法です。Lollipopのapp:srcCompat前に、外部のベクタードローアブルを直接参照すると失敗することがわかります。


1

Android 5.0(APIレベル21)以降はベクタードローアブルをサポートしているため、古いバージョンでベクタードローアブルをサポートするためにapp:srcCompatが追加されました

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.