2017-12-29 13 views
-1

Android에서 vector을 사용하는 데 문제가 있습니다.

API24와 휴대 전화에서 테스트 할 때 모든 것이 잘 작동하는 동안 나는 android:background="@drawable/ic_blue2"

사용하여 내 Textview의 배경으로 이미지를 표시합니다 (안드로이드 스튜디오에서 수입 SVG에서) 벡터를 사용하고, 시작할 때 응용 프로그램이 충돌 InflateException 및 Resources $ NotFoundException이있는 API22가있는 전화.

저는 Gradle vectorDrawables.useSupportLibrary = true에 추가하는 것과 같은 이전 게시물에 대한 답변을 시도했지만 작동하지 않았습니다.

Android Studio 3.0.1 및 Gradle 3.0.1을 사용하고 있습니다. 내 활동은 AppCompatActivity가 아니라 "활동"을 확장한다는 점에 유의하십시오 (여기에 중요한지는 모르겠 음). 여기

레이아웃의 코드입니다 : https://pastebin.com/DRR5eRm0

그리고 API22에 오류 (파일이 너무 큰)

<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayout 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:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/colorBackgroundWhite" 
    tools:context="jdev.com.handtwist.MainMenu"> 


    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="center_vertical" 
     android:orientation="vertical" 
     android:padding="20dp"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="@drawable/ic_gray7" 
      android:orientation="vertical"> 

      <TextView 
       android:id="@+id/textViewAppname" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:background="@drawable/ic_blue7" 
       android:padding="10dp" 
       android:text="test" 
       android:textAlignment="center" 
       android:textColor="@color/colorBackgroundWhite" 
       android:textSize="36sp" 
       android:textStyle="bold" /> 

      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:orientation="vertical" 
       android:paddingBottom="30dp" 
       android:paddingLeft="50dp" 
       android:paddingRight="50dp" 
       android:paddingTop="20dp" 
       tools:layout_editor_absoluteY="100dp"> 

       <Button 
        android:id="@+id/buttonSolo" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:background="@drawable/ic_blue2" 
        android:padding="10dp" 
        android:text="@string/solo" 
        android:textAlignment="center" 
        android:textColor="@color/colorBackgroundWhite" 
        android:textSize="24sp" /> 

       <Button 
        android:id="@+id/buttonMulti" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_marginTop="10dp" 
        android:background="@drawable/ic_blue2" 
        android:padding="10dp" 
        android:text="@string/multi" 
        android:textAlignment="center" 
        android:textColor="@color/colorBackgroundWhite" 
        android:textSize="24sp" /> 

      </LinearLayout> 
     </LinearLayout> 

    </LinearLayout> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="bottom" 
     android:orientation="vertical"> 

     <TextView 
      android:id="@+id/textViewVersion" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="Version" 
      android:textAlignment="center" 
      android:textColor="@color/colorBackgroundWhite" /> 
    </LinearLayout> 

</android.support.constraint.ConstraintLayout> 

내가 배경으로 사용하려고 XML의 예

E/AndroidRuntime: FATAL EXCEPTION: main 
        Process: jdev.com.handtwist, PID: 4666 
        java.lang.RuntimeException: Unable to start activity ComponentInfo{jdev.com.handtwist/jdev.com.handtwist.MainMenu}: android.view.InflateException: Binary XML file line #0: Error inflating class <unknown> 
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3160) 
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3275) 
         at android.app.ActivityThread.access$1000(ActivityThread.java:218) 
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1744) 
         at android.os.Handler.dispatchMessage(Handler.java:102) 
         at android.os.Looper.loop(Looper.java:145) 
         at android.app.ActivityThread.main(ActivityThread.java:7007) 
         at java.lang.reflect.Method.invoke(Native Method) 
         at java.lang.reflect.Method.invoke(Method.java:372) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199) 
        Caused by: android.view.InflateException: Binary XML file line #0: Error inflating class <unknown> 
         at android.view.LayoutInflater.createView(LayoutInflater.java:640) 
         at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55) 
         at android.view.LayoutInflater.onCreateView(LayoutInflater.java:689) 
         at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:748) 
         at android.view.LayoutInflater.rInflate(LayoutInflater.java:813) 
         at android.view.LayoutInflater.rInflate(LayoutInflater.java:821) 
         at android.view.LayoutInflater.inflate(LayoutInflater.java:511) 
         at android.view.LayoutInflater.inflate(LayoutInflater.java:415) 
         at android.view.LayoutInflater.inflate(LayoutInflater.java:366) 
         at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:450) 
         at android.app.Activity.setContentView(Activity.java:2400) 
         at jdev.com.handtwist.MainMenu.onCreate(MainMenu.java:40) 
         at android.app.Activity.performCreate(Activity.java:6609) 
         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1134) 
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3113) 
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3275)  
         at android.app.ActivityThread.access$1000(ActivityThread.java:218)  
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1744)  
         at android.os.Handler.dispatchMessage(Handler.java:102)  
         at android.os.Looper.loop(Looper.java:145)  
         at android.app.ActivityThread.main(ActivityThread.java:7007)  
         at java.lang.reflect.Method.invoke(Native Method)  
         at java.lang.reflect.Method.invoke(Method.java:372)  
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)  
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)  
        Caused by: java.lang.reflect.InvocationTargetException 
         at java.lang.reflect.Constructor.newInstance(Native Method) 
         at java.lang.reflect.Constructor.newInstance(Constructor.java:288) 
         at android.view.LayoutInflater.createView(LayoutInflater.java:614) 
         at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55)  
         at android.view.LayoutInflater.onCreateView(LayoutInflater.java:689)  
         at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:748)  
         at android.view.LayoutInflater.rInflate(LayoutInflater.java:813)  
         at android.view.LayoutInflater.rInflate(LayoutInflater.java:821)  
         at android.view.LayoutInflater.inflate(LayoutInflater.java:511)  
         at android.view.LayoutInflater.inflate(LayoutInflater.java:415)  
         at android.view.LayoutInflater.inflate(LayoutInflater.java:366)  
         at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:450)  
         at android.app.Activity.setContentView(Activity.java:2400)  
         at jdev.com.handtwist.MainMenu.onCreate(MainMenu.java:40)  
         at android.app.Activity.performCreate(Activity.java:6609)  
         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1134)  
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3113)  
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3275)  
         at android.app.ActivityThread.access$1000(ActivityThread.java:218)  
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1744)  
         at android.os.Handler.dispatchMessage(Handler.java:102)  
         at android.os.Looper.loop(Looper.java:145)  
         at android.app.ActivityThread.main(ActivityThread.java:7007)  
         at java.lang.reflect.Method.invoke(Native Method)  
         at java.lang.reflect.Method.invoke(Method.java:372)  
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)  
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)  
        Caused by: android.content.res.Resources$NotFoundException: File res/drawable-anydpi-v21/ic_gray7.xml from drawable resource ID #0x7f0603a5 
         at android.content.res.Resources.loadDrawableForCookie(Resources.java:4061) 
         at android.content.res.Resources.loadDrawable(Resources.java:3929) 
         at android.content.res.Resources.loadDrawable(Resources.java:3779) 
         at android.content.res.TypedArray.getDrawable(TypedArray.java:776) 
         at android.view.View.<init>(View.java:4001) 
         at android.view.ViewGroup.<init>(ViewGroup.java:513) 
         at android.widget.LinearLayout.<init>(LinearLayout.java:199) 
         at android.widget.LinearLayout.<init>(LinearLayout.java:195) 
         at android.widget.LinearLayout.<init>(LinearLayout.java:191) 
         at java.lang.reflect.Constructor.newInstance(Native Method)  
         at java.lang.reflect.Constructor.newInstance(Constructor.java:288)  
         at android.view.LayoutInflater.createView(LayoutInflater.java:614)  
         at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:55)  
         at android.view.LayoutInflater.onCreateView(LayoutInflater.java:689)  
         at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:748)  
         at android.view.LayoutInflater.rInflate(LayoutInflater.java:813)  
         at android.view.LayoutInflater.rInflate(LayoutInflater.java:821)  
         at android.view.LayoutInflater.inflate(LayoutInflater.java:511)  
         at android.view.LayoutInflater.inflate(LayoutInflater.java:415)  
         at android.view.LayoutInflater.inflate(LayoutInflater.java:366)  
         at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:450)  
         at android.app.Activity.setContentView(Activity.java:2400)  
         at jdev.com.handtwist.MainMenu.onCreate(MainMenu.java:40)  
         at android.app.Activity.performCreate(Activity.java:6609)  
         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1134)  
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3113)  
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3275)  
         at android.app.ActivityThread.access$1000(ActivityThread.java:218)  
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1744)  
         at android.os.Handler.dispatchMessage(Handler.java:102)  
         at android.os.Looper.loop(Looper.java:145)  
         at android.app.ActivityThread.main(ActivityThread.java:7007)  
         at java.lang.reflect.Method.invoke(Native Method)  
         at java.lang.reflect.Method.invoke(Method.java:372)  
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)  
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)  
        Caused by: android.content.res.Resources$NotFoundException: File res/drawable-anydpi-v22/$ic_gray7__0.xml from color state list resource ID #0x7f060118 
         at android.content.res.Resources.twLoadColorStateList(Resources.java:4179) 
         at android.content.res.Resources.loadColorStateList(Resources.java:4117) 
         at android.content.res.TypedArray.getColor(TypedArray.java:397) 
         at android.graphics.drawable.VectorDrawable$VFullPath.updateStateFromTypedArray(VectorDrawable.java:1439) 
         at android.graphics.drawable.VectorDrawable$VFullPath.inflate(VectorDrawable.java:1418) 
         at android.graphics.drawable.VectorDrawable.inflateInternal(VectorDrawable.java:544) 
         at android.graphics.drawable.VectorDrawable.inflate(VectorDrawable.java:460) 
         at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:1192) 
         at android.graphics.drawable.Drawable.createFromXml(Drawable.java:1086) 
        at android.content.res.Resources.loadDraw 

나를 도울 수있는 사람 덕분에.

편집 : 벤의 접근 오류 사용하려고 할 때 : XML 벡터 드로어 블을위한

E/AndroidRuntime: FATAL EXCEPTION: main 
        Process: jdev.com.handtwist, PID: 16157 
        java.lang.RuntimeException: Unable to start activity ComponentInfo{jdev.com.handtwist/jdev.com.handtwist.MainMenu}: android.content.res.Resources$NotFoundException: File res/drawable-anydpi-v21/ic_testb.xml from drawable resource ID #0x7f0603ce 
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3160) 
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3275) 
         at android.app.ActivityThread.access$1000(ActivityThread.java:218) 
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1744) 
         at android.os.Handler.dispatchMessage(Handler.java:102) 
         at android.os.Looper.loop(Looper.java:145) 
         at android.app.ActivityThread.main(ActivityThread.java:7007) 
         at java.lang.reflect.Method.invoke(Native Method) 
         at java.lang.reflect.Method.invoke(Method.java:372) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199) 
        Caused by: android.content.res.Resources$NotFoundException: File res/drawable-anydpi-v21/ic_testb.xml from drawable resource ID #0x7f0603ce 
         at android.content.res.Resources.loadDrawableForCookie(Resources.java:4061) 
         at android.content.res.Resources.loadDrawable(Resources.java:3929) 
         at android.content.res.Resources.getDrawable(Resources.java:1991) 
         at android.content.res.Resources.getDrawable(Resources.java:1973) 
         at android.content.Context.getDrawable(Context.java:409) 
         at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:351) 
         at jdev.com.handtwist.MainMenu.onCreate(MainMenu.java:63) 
         at android.app.Activity.performCreate(Activity.java:6609) 
         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1134) 
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3113) 
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3275)  
         at android.app.ActivityThread.access$1000(ActivityThread.java:218)  
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1744)  
         at android.os.Handler.dispatchMessage(Handler.java:102)  
         at android.os.Looper.loop(Looper.java:145)  
         at android.app.ActivityThread.main(ActivityThread.java:7007)  
         at java.lang.reflect.Method.invoke(Native Method)  
         at java.lang.reflect.Method.invoke(Method.java:372)  
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)  
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)  
        Caused by: android.content.res.Resources$NotFoundException: File res/drawable-anydpi-v22/$ic_testb__0.xml from color state list resource ID #0x7f060295 
         at android.content.res.Resources.twLoadColorStateList(Resources.java:4179) 
         at android.content.res.Resources.loadColorStateList(Resources.java:4117) 
         at android.content.res.TypedArray.getColor(TypedArray.java:397) 
         at android.graphics.drawable.VectorDrawable$VFullPath.updateStateFromTypedArray(VectorDrawable.java:1439) 
         at android.graphics.drawable.VectorDrawable$VFullPath.inflate(VectorDrawable.java:1418) 
         at android.graphics.drawable.VectorDrawable.inflateInternal(VectorDrawable.java:544) 
         at android.graphics.drawable.VectorDrawable.inflate(VectorDrawable.java:460) 
         at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:1192) 
         at android.graphics.drawable.Drawable.createFromXml(Drawable.java:1086) 
         at android.content.res.Resources.loadDrawableForCookie(Resources.java:4045) 
         at android.content.res.Resources.loadDrawable(Resources.java:3929)  
         at android.content.res.Resources.getDrawable(Resources.java:1991)  
         at android.content.res.Resources.getDrawable(Resources.java:1973)  
         at android.content.Context.getDrawable(Context.java:409)  
         at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:351)  
         at jdev.com.handtwist.MainMenu.onCreate(MainMenu.java:63)  
         at android.app.Activity.performCreate(Activity.java:6609)  
         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1134)  
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3113)  
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3275)  
         at android.app.ActivityThread.access$1000(ActivityThread.java:218)  
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1744)  
         at android.os.Handler.dispatchMessage(Handler.java:102)  
         at android.os.Looper.loop(Looper.java:145)  
         at android.app.ActivityThread.main(ActivityThread.java:7007)  
         at java.lang.reflect.Method.invoke(Native Method)  
         at java.lang.reflect.Method.invoke(Method.java:372)  
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)  
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)  
        Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #0: invalid drawable tag gradient 
         at android.content.res.ColorStateList.twCreateFromXmlInner(ColorStateList.java:176) 
         at android.content.res.ColorStateList.twCreateFromXml(ColorStateList.java:147) 
         at android.content.res.Resources.twLoadColorStateList(Resources.java:4175) 
         at android.content.res.Resources.loadColorStateList(Resources.java:4117)  
         at android.content.res.TypedArray.getColor(TypedArray.java:397)  
         at android.graphics.drawable.VectorDrawable$VFullPath.updateStateFromTypedArray(VectorDrawable.java:1439)  
         at android.graphics.drawable.VectorDrawable$VFullPath.inflate(VectorDrawable.java:1418)  
         at android.graphics.drawable.VectorDrawable.inflateInternal(VectorDrawable.java:544)  
         at android.graphics.drawable.VectorDrawable.inflate(VectorDrawable.java:460)  
         at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:1192)  
         at android.graphics.drawable.Drawable.createFromXml(Drawable.java:1086)  
         at android.content.res.Resources.loadDrawableForCookie(Resources.java:4045)  
         at android.content.res.Resources.loadDrawable(Resources.java:3929)  
         at android.content.res.Resources.getDrawable(Resources.java:1991)  
         at android.content.res.Resources.getDrawable(Resources.java:1973)  
         at android.content.Context.getDrawable(Context.java:409)  
         at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:351)  
         at jdev.com.handtwist.MainMenu.onCreate(MainMenu.java:63)  
         at android.app.Activity.performCreate(Activity.java:6609)  
         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1134)  
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3113)  
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3275)  
         at android.app.ActivityThread.access$1000(ActivityThread.java:218)  
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1744)  
         at android.os.Handler.dispatchMessage(Handler.java:102)  
         at android.os.Looper.loop(Looper.java:145)  
         at android.app.ActivityThread.main(ActivityThread.java:7007)  
         at java.lang.reflect.Method.invoke(Native Method)  
         at java.lang.reflect.Method.invoke(Method.java:372)  
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)  
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)  
+0

res/drawable-anydpi-v21/ic_gray7.xml을로드하는 데 문제가있는 것처럼 보입니다. v22보다 상위 버전의 API에 대한 버전이 있습니까? 이 드로어 블의 내용을 추가 할 수 있습니까? –

+0

다른 API에 대해서는 (현재로서는) 테스트 할 수 없습니다. 내가 사용하려고하는 XML 파일의 내용을 게시물에 추가했습니다. –

답변

0

기본 지원을 바로 이전의 API 레벨에 대해 존재하지 않습니다. 당신 때문에 특별한 app:srcCompat 속성의 ImageView의에서 사용할 수 있지만 그러나 자바에서 사용할 수 android:background

그들을 사용할 수 없습니다. 예 :

Button b = findViewById(R.id.buttonSolo); 
Drawable d = ContextCompat.getDrawable(this, R.drawable.ic_blue2); 
b.setBackground(d); 

은 모든 API 수준에서 작동해야합니다.

+0

답변 해 주셔서 감사합니다. 나는 당신의 코드를 시도했지만 작동하지 않습니다.나는 이것을 처리해야하고 벡터를 잊어 버리거나'android : background'와 함께 작동하는 API> = 24만을 지원해야한다고 생각합니다. –

+0

@ JérÉmy는 어떤 방식으로 작동하지 않습니까? –

+0

첫 번째 게시물에 오류 로그를 추가했습니다. 같은 종류의 문제. 그러나 왜 응용 프로그램은 xml이 res/drawable-anydpi-v21에서 찾은 다음'res/drawable-anydpi-v22'에서 xml이 res/drawable에있는 동안 xml을 찾으려고하는지 이해하지 못합니다. 그 폴더에 xml을 배치하려고 시도했지만 아무 것도 변경하지 않습니다. –

0

pastebin의 링크 (자산)가 새 XML 번들 형식을 사용하고있는 것처럼 보입니다. <aapt:attr name="android:fillColor"> 노드를 확인하십시오. Nick Butcher에서 this G+ post을 참조하십시오. 애니메이션 벡터 드로어 블에 관한 것이라해도, 메커니즘이 동일하다는 점에서 귀하의 케이스에 적용됩니다. 확인

중요한 비트는 다음과 같습니다

이 (현재 RC에서) 24+ 빌드 도구가 필요하지만 출력은 호환됩니다.

따라서 빌드 도구가 업데이트되었는지 확인해야합니다.

+0

내 잘못! 나는 svg와 xml을 pastebin으로 업로드했지만, 나는 https://pastebin.com/DRR5eRm0 내 게시물을 업데이트했다. –

+0

답변을 업데이트했습니다. –

+0

27.0.1을 사용하고 있습니다. 최신 버전 –

관련 문제