web-dev-qa-db-ja.com

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

Android StudioのVector Assetsを使用してアイコンを追加してImageViewを作成すると、app:srcCompat="@drawable/ic_play"行にエラーが表示されます。

app:srcCompatAndroid:srcに変更すると、エラーはなくなりますが、アイコンはピクセル化されたように見えます。

主な違いは何ですか

app:srcCompat="@drawable/ic_play"

そして

Android:src="@drawable/ic_play"
108
Zayid Mohammed

app:srcCompat

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

Androidサポートライブラリ23.3.0 )サポートベクタドロアブルapp:srcCompatでしかロードできません。

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

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

Android:src

このImageViewのコンテンツとして描画可能オブジェクトを設定します。元のサイズで表示されます。自動スケーリングはありません。

107
IntelliJ Amiya

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アナライザツールで確認できます。 vectorDrawables.useSupportLibrary = trueの有無にかかわらずapkを構築するだけです。

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

10
bitvale

使用:

app:srcCompat="@drawable/backImage"

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

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

あなたが得ているのは、無視することができるほんのちょっとしたエラーのようです。私は試してみて同じエラーを得ましたが、それは正しく機能しています。

一時的にこのエラーが発生しないようにするためにtools:ignore="MissingPrefix"を使用できます。

これが役に立つことを願っています。

7
Chandrahasan

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

3
Gabe Sechan

AppCompatImageView(またはImageButtonFloatingActionButtonなどのサブクラス)と共に使用する場合、新しいバージョンのapp:srcCompat属性を使用して、古いバージョンのプラットフォーム上のベクトルドロアブル(およびその他のドロアブル)を参照できます。 Android:srcで利用可能です。

Android.support.v7.appcompat.R.attr.srcCompat

srcCompat

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

"@[+][package:]type/name"形式の別のリソースへの参照、または"?[package:]type/name"形式のテーマ属性です。


xmlns:app="http://schemas.Android.com/apk/res-auto"を使用するときにapp:srcCompatを挿入することを忘れないでください。

3
Mir-Ismaili
app:srcCompat="some_resource" 

サポートライブラリに入っているのはAppCompatActivity srcであることを参考にしながら

Android:src="some_resource"

単純な活動を指します。

2
Najeeb Idrees

AppCompatImageView(またはImageButtonFloatingActionButtonなどのサブクラス)と一緒に使用する場合は、新しいapp:srcCompat属性を使用してベクトルドロアブル(およびAndroid:srcで使用可能なその他のドロアブル)を参照できます。また、実行時にdrawableを変更している場合は、以前と同じsetImageResource()メソッドを使用できます(変更はありません)。

AppCompatapp:srcCompatを使用するのは、ベクトルドロアブルをアプリに統合するための最も確実な方法です。 app:srcCompatの外側で直接ベクトルドロアブルを参照すると、Lollipopの前に失敗することがわかります。

2
Muhammad Younas

Android 5.0(APIレベル21)以降では、ベクトルドロアブルをサポートしているため、旧バージョンのアプリでベクトルドロアブルをサポートすることができます。srcCompatが追加されました。

0
SaravInfern