2016-07-23 2 views
4

OK 내가 읽은 유사한 질문에 아무것도하지만, 고정 내 문제잘못된 당김 태그 벡터 - APPCOMPAT-V7 : 24.1.1

Gradle을 classpath 'com.android.tools.build:gradle:2.1.2'

android { 
    defaultConfig { 
     minSdkVersion 16 
     targetSdkVersion 24 
     vectorDrawables.useSupportLibrary = true 
    } 
} 

dependencies { 
    compile 'com.android.support:recyclerview-v7:24.1.1' 
    compile 'com.android.support:appcompat-v7:24.1.1' 
    compile 'com.android.support:cardview-v7:24.1.1' 
    compile 'com.android.support:support-v4:24.1.1' 
    compile 'com.android.support:design:24.1.1' 
} 

activity.xml

볼 수 대답의 대부분
<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/ScrollView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".ViewItem" 
    tools:ignore="MissingPrefix"> 

    ... 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_column="0" 
     android:layout_gravity="center_vertical" 
     android:layout_marginBottom="10dp" 
     android:layout_marginLeft="5dp" 
     android:layout_marginRight="5dp" 
     android:layout_marginTop="10dp" 
     android:foregroundGravity="center_vertical|center|center_horizontal" 
     app:srcCompat="@drawable/ic_car" /> 

    ... 

</ScrollView> 

벡터 ic_car.xml

<?xml version="1.0" encoding="utf-8"?> 
<vector xmlns:android="http://schemas.android.com/apk/res/android" 
    android:width="24dp" 
    android:height="24dp" 
    android:viewportHeight="24" 
    android:viewportWidth="24"> 

    <path 
     android:fillColor="#5c5c5c" 
     android:pathData="M18.92 6.01C18.72 5.42 18.16 5 17.5 5h-11c-.66 0-1.21 .42 -1.42 1.01L3 12v8c0 
.55 .45 1 1 1h1c.55 0 1-.45 1-1v-1h12v1c0 .55 .45 1 1 1h1c.55 0 1-.45 
1-1v-8l-2.08-5.99zM6.5 16c-.83 0-1.5-.67-1.5-1.5S5.67 13 6.5 13s1.5 .67 1.5 
1.5S7.33 16 6.5 16zm11 0c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5 .67 1.5 
1.5-.67 1.5-1.5 1.5zM5 11l1.5-4.5h11L19 11H5z" /> 
    <path android:pathData="M0 0h24v24H0z" /> 
</vector> 

내 활동 등급이 AppCompatActivity으로 확장되고 모든 android:src 태그가 app:srcCompat으로 변경되었지만 16으로 설정된 minSdkVersion에서 여전히 Invalid drawable tag vector 오류가 표시됩니다.

+0

당신이'안드로이드를 사용하여 시도했다. –

+0

@MuddassirAhmed 예 물론 했지 – PYPL

+0

릴리스 버전 또는 모든 버전에서만 발생합니까? – lionscribe

답변

0

문제는 내 경우에는 안드로이드 스튜디오 2.2

1

진실은 코드를 보면 srcCompat 특성 만 사용하고 있기 때문에 모든 버전의 라이브러리에서 작동해야합니다.
내가 의심하는 한 가지 문제는 벡터가 drawable-21 폴더에있는 반면 일반 Drawable 폴더에는이 Drawables를 참조하는 단일 파일이 있다는 것입니다. 이 방법은 초기 버전의 라이브러리에서 수행되었지만 아래 변경 사항으로 인해 더 이상 작동하지 않습니다. 실제 벡터 파일을 Drawable 폴더로 옮기면됩니다.
ImageViewAppCompatImageView으로 변경하여 가끔 비슷한 문제가 발생했을 수 있습니다. 라이브러리가 자동으로이 작업을 수행한다고해도, 때로는 그렇지 않습니다.
벡터가 복합 이미지 (예 : 계층화 된 이미지)의 일부인 경우에도 코드가 손상 될 수 있습니다. 또는 코드를 게시하지 않은 어딘가에서 깨고 있습니다. 예를 들어, 벡터를 ImageButton의 leftImage로 설정하는 경우입니다. @Zeke가 답변 한대로이 기능은 23.3에서 제거되었습니다. 그럼에도 불구하고, 그것은 23.4에 반환되었으며, 그들은 여전히 ​​메모리 누수가 발생할 수 있습니다 경고 활동

static { 
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); 
} 

에 다음을 추가하여 사용 가능했다. 최소한의 사용으로 인해 문제가되어서는 안되지만 https://medium.com/@chrisbanes/appcompat-v23-2-age-of-the-vectors-91cbafa87c88#.s48hqaw1u을 참조하십시오.

간단한 해결 방법은 드로어 블을 만들고 코드로 설정하는 것입니다. 이 같은;

Drawable icon = AppCompatDrawableManager.get().getDrawable(context, resVectorID); 
// Set it for example as a left image of button 
button.setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null); 

메모리 문제가 있는지 여부는 테스트하지 않았으며 아이디어가 없습니다. 누군가가 후속 조치를 취할 수 있다면 그것을 좋아할 것입니다.

+0

3 가지 일을해야합니다. 1)'gradle'에서'vectorDrawables.useSupportLibrary = true'; 2)'static {AppCompatDelegate.setCompatVectorFromResourcesEnabled (true); }'액티비티 렌더링 SVG; 3)'ImageView'에서'android : src' 대신에'app : srcCompat'; 그들 중의 하나라도 놓치더라도 _will_ ** 크래시 ** 앱 - '24.2.0'부터 –

2

로 업데이트 한 후 자신을 해결있어, 충돌로 인해 사전 롤리팝 장치에서 벡터 묘화를 얻을 수 Resources.getDrawable(int)를 사용하여 일어났다. ImageView.setImageDrawable(Drawable)으로 전달할 drawable을 만들려고했습니다.

안드로이드 지원 라이브러리 23.3.0 현재로

Google Blog Post for Android Support Library 23.2:

는, 지원 벡터 드로어 블은 에만 응용 프로그램을 통해로드 할 수 있습니다 : srcCompat 또는 setImageResource().

해결책 : VectorDrawableCompat.create(Resources, int, Theme)을 사용하여 드로어 블을 생성하십시오.

ImageView.setImageResource(int)을 사용할 수도 있지만 UI 스레드의 비트 맵을 읽거나 디코딩합니다.

0

나는 다음과 같이했다 : 대신 응용 프로그램 '의 src` : srcCompat`

public static final Drawable getMyDrawable(Context context, int id) { 
    final int version = Build.VERSION.SDK_INT; 
    if (version >= 21) { 
     return ContextCompat.getDrawable(context, id); 
    } else { 
     return VectorDrawableCompat.create(context.getResources(), id, context.getTheme()); 
    } 
}