최신 업데이트-2019 년 6 월
지원 라이브러리는 원래 답변 이후 약간 변경되었습니다. 이제 Gradle 용 Android 플러그인도 빌드시 PNG를 자동으로 생성 할 수 있습니다. 따라서 다음은 요즘 작동해야하는 두 가지 새로운 접근 방식입니다. 여기에서 자세한 정보를 찾을 수 있습니다 .
PNG 생성
Gradle은 빌드시 자산에서 PNG 이미지를 자동으로 생성 할 수 있습니다. 그러나이 접근 방식에서는 모든 xml 요소가 지원되는 것은 아닙니다 . 이 솔루션은 코드 나 build.gradle에서 아무것도 변경할 필요가 없기 때문에 편리합니다. Android 플러그인 1.5.0 이상 및 Android Studio 2.2 이상을 사용하고 있는지 확인하십시오. .
내 앱에서이 솔루션을 사용하고 있으며 잘 작동합니다. 추가 build.gradle 플래그가 필요하지 않습니다. 해킹이 필요하지 않습니다. 당신이 가면 / 구축 / 생성 / 고해상도 / PNG 파일 / ... 당신은 생성 된 모든 PNG 파일을 볼 수 있습니다.
따라서 모든 xml 요소가 지원되지 않기 때문에 간단한 아이콘이있는 경우이 솔루션이 적합 할 수 있습니다. Android Studio와 Gradle 용 Android 플러그인을 업데이트하기 만하면됩니다.
지원 라이브러리
아마도 이것이 당신을 위해 일할 솔루션입니다. 여기에왔다면 Android Studio가 PNG를 자동으로 생성하지 않는다는 의미입니다. 따라서 앱이 충돌합니다.
또는 Android Studio에서 PNG를 전혀 생성하지 않기를 원할 수도 있습니다.
XML 요소의 하위 집합을 지원하는 "자동 PNG 생성"과 달리이 솔루션은 모든 xml 태그를 지원합니다. 따라서 벡터 드로어 블을 완벽하게 지원합니다.
먼저 build.gradle 을 업데이트하여 지원해야합니다.
android {
defaultConfig {
// This flag will also prevents Android Studio from generating PNGs automatically
vectorDrawables.useSupportLibrary = true
}
}
dependencies {
// Use this for Support Library
implementation 'com.android.support:appcompat-v7:23.2.0' // OR HIGHER
// Use this for AndroidX
implementation 'androidx.appcompat:appcompat:1.1.0' // OR HIGHER
}
그런 다음 로드하는 동안 app:srcCompat
대신 사용android:src
VectorDrawables
. 이것을 잊지 마세요.
들어 TextView
당신이 사용하는 경우, androidx
지원 라이브러리의 버전을, 당신은 사용할 수 있습니다app:drawableLeftCompat
(또는 오른쪽, 위, 아래) 대신app:drawableLeft
의 경우 CheckBox
/ RadioButton
사용 app:buttonCompat
대신android:button
.
당신이 사용하지 않는 경우 androidx
지원 도서관과의 버전 minSdkVersion
IS 17
이상 또는 버튼을 사용하여, 당신은을 통해 프로그래밍 방식으로 설정하려고 할 수 있습니다
Drawable icon = AppCompatResources.getDrawable(context, <drawable_id>);
textView.setCompoundDrawablesWithIntrinsicBounds(<leftIcon>,<topIcon>,<rightIcon>,<bottomIcon>);
업데이트-2016 년 7 월
그들은 Android 지원 라이브러리 23.4.0 에서 VectorDrawable을 다시 활성화했습니다.
AppCompat 사용자의 경우 AppCompatDelegate.setCompatVectorFromResourcesEnabled (true)를 통해 리소스 (23.2에서 발견 된 동작)에서 벡터 드로어 블 지원을 다시 활성화 하는 옵트 인 API를 추가했습니다. 이로 인해 여전히 메모리 사용에 문제가 발생할 수 있습니다. 구성 인스턴스를 업데이트하는 데 문제가 있으므로 기본적으로 비활성화되어 있습니다.
아마도 ,build.gradle
설정이 폐지되어 당신은 적절한 활동 (시험에 그러나 필요)에서 활성화해야합니다.
이제 활성화하려면 다음을 수행해야합니다.
public class MainActivity extends AppCompatActivity {
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
...
}
원래 답변-2016 년 4 월
최신 라이브러리 버전 23.3.0에서 Support Vector가 비활성화 되었기 때문에 이런 일이 발생한 것 같습니다.
이 POST 에 따르면 :
AppCompat 사용자의 경우 버전 23.2.0 / 23.2.1 (ISSUE 205236) 의 구현에서 발견 된 문제로 인해 Lollipop 이전 기기의 리소스에서 벡터 드로어 블을 사용할 수있는 기능을 제거하기로 결정했습니다 . app : srcCompat 및 setImageResource () 사용은 계속 작동합니다.
문제 205236 을 방문 하면 향후 활성화 될 것으로 보이지만 메모리 문제는 곧 해결되지 않을 것입니다.
다음 릴리스에서는 제거 된 VectorDrawable 지원을 다시 활성화 할 수있는 옵트 인 API를 추가했습니다. 이전과 동일한주의 사항이 있습니다 (메모리 사용량 및 구성 업데이트 문제).
비슷한 문제가있었습니다. 그래서 제 경우에는 벡터 드로어 블을 사용하는 모든 아이콘을 리소스에서 PNG 이미지로 다시 되돌 렸습니다 (다시 활성화하는 옵션을 제공 한 후에도 메모리 문제가 계속 발생하기 때문입니다).
이것이 최선의 선택인지 확실하지 않지만 내 생각에 모든 충돌을 해결합니다.