[android] 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"



답변

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의 내용으로 설정합니다. 원본 크기로 표시됩니다. 자동 스케일링이 없습니다.


답변

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.

이것이 가장 큰 차이점이라고 생각합니다.


답변

사용하다:

app:srcCompat="@drawable/backImage"

srcCompat 속성은 실제로 AppCompat 라이브러리 내에 정의되어 있습니다. 중요 :이를 위해 적절한 네임 스페이스를 추가해야합니다.

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

노트

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

tools:ignore="MissingPrefix"일시적으로이 오류가 표시되지 않도록 하는 데 사용할 수 있습니다 .

이게 도움이 되길 바란다.


답변

사용하는 경우 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.


답변

벡터 및 애니메이션 벡터는 최신 버전의 프레임 워크에서만 지원되었습니다. 호환성 라이브러리와 함께 srcCompat를 사용하여 작동시킬 수 있지만 지원 라이브러리의 특정보기에서만 작동합니다. android : 대신 app :이 사용됩니다. 이는 프레임 워크의 일부가 아니라 앱에서 정의한 매개 변수를 의미합니다.


답변

app:srcCompat="some_resource" 

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

android:src="some_resource"

간단한 활동을 말합니다.


답변

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

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