Android의 레이아웃 XML에서 app : srcCompat와 android : src의 차이점


138

Android Studio의 Vector Assets를 사용하여 아이콘이 추가 된 ImageView를 만들 때마다 줄에 오류가 발생합니다 app:srcCompat="@drawable/ic_play"

나는 변경하는 경우 app:srcCompatandroid:src오류가 사라이지만 아이콘 모양은 픽셀 화.

주요 차이점은 무엇입니까

app:srcCompat="@drawable/ic_play"

android:src="@drawable/ic_play"

답변:


139

app : srcCompat

벡터 드로어 블 을 앱 에 통합하는 가장 방대한 방법입니다. 벡터 드로어 블을 사용하면 여러 png 자산을 XML로 정의 된 단일 벡터 그래픽으로 바꿀 수 있습니다. 이전에는 Lollipop 이상 기기로 제한되었지만

노트

현재 안드로이드 지원 라이브러리 23.3.0 , 지원 벡터 드로어 블을 통해서만로드 할 수 있습니다 app:srcCompat.

파일에 vectorDrawables.useSupportLibrary = true 를 추가 해야 build.gradle합니다.

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

안드로이드 : src

드로어 블을이 ImageView의 내용으로 설정합니다. 원본 크기로 표시됩니다. 자동 스케일링이 없습니다.


2
앱 오류가 : Gradle을 응용 프로그램 모듈에 vectorDrawables.useSupportLibrary = TRUE를 추가 할 때 srcCompact 사라 졌어요
Zayid 모하메드

3
app : srcCompat이 이전 Android 버전과 충돌합니까? 보다 구체적으로 Api 19는 내가 언급 한 가장 오래된 버전입니다.
Equivocal

와우 결국 비트 맵 아이콘을 제거 할 수 있습니다.
Meow Cat 2012 년

구글 플러스 포스트 링크는 이제 죽었다
Vadim Kotov

에를 추가 build.gradle했지만 여전히 작동하지 않습니다. 어떤 아이디어가 있습니까?
David Callanan

20

build.gradle 파일에서 사용 android:src="@drawable/some_vector"하지 않고 vectorDrawables.useSupportLibrary = true앱에 벡터 이미지 (벡터 드로어 블)가있는 경우 apk 파일 을 빌드하는 동안 Android gradle plugin은 다른 화면 (hdpi, xhdpi ...)에서 많은 * .png 파일을 생성합니다. 각각의 벡터 드로어 블 (API = <19에만 해당). 결과는 apk의 더 큰 크기입니다 .

안드로이드 app:srcCompat="@drawable/some_vector"와 함께 사용할 때 vectorDrawables.useSupportLibrary = true파일을 생성하지 않고 벡터 드로어 블 파일을 사용 *.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"

노트

당신이 얻는 것은 무시할 수있는 린트 오류 일 것 같습니다. 나는 같은 오류를 시도하고 얻었지만 올바르게 작동합니다.

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를 사용하여 작동시킬 수 있지만 지원 라이브러리의 특정보기에서만 작동합니다. android : 대신 app :이 사용됩니다. 이는 프레임 워크의 일부가 아니라 앱에서 정의한 매개 변수를 의미합니다.


3
app:srcCompat="some_resource" 

지원 라이브러리에있는 AppCompatActivity src임을 나타냅니다.

android:src="some_resource"

간단한 활동을 말합니다.


3

사용하는 경우 AppCompatImageView(예 또는 서브 클래스 ImageButtonFloatingActionButton), 새 사용할 수 있습니다 app:srcCompat참조 벡터 드로어 블에 속성을 (뿐만 아니라 사용할 수있는 다른 당김 android:src). 런타임에 드로어 블을 변경하는 경우 setImageResource()이전 과 동일한 방법 을 사용할 수 있습니다 (변경 사항 없음).

사용 AppCompatapp:srcCompat벡터 드로어 블을 앱에 통합하는 가장 확실한 방법입니다. Lollipopapp:srcCompat 이전 에는 벡터 드로어 블을 직접 참조하는 것이 실패 한다는 것을 알 수 있습니다 .


1

Android 5.0 (API 레벨 21) 이상에서는 벡터 드로어 블 지원을 제공하므로 이전 버전의 벡터 드로어 블을 지원하기 위해 app : srcCompat가 추가되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.