web-dev-qa-db-ja.com

KitKat以下ではVectorDrawableCompat Resources $ NotFoundException

有効にすると

vectorDrawables.useSupportLibrary = true

KitKat以下のデバイスで多くのresourceNotFoundExceptionsが発生します。メニューのNavigationViewとapp:srcCompatのImageViewsでもこれを取得します

Android.content.res.Resources$NotFoundException: Resource ID #0x7f02006b
at Android.content.res.Resources.getValue(Resources.Java:2305)
at Android.support.v7.widget.AppCompatDrawableManager.loadDrawableFromDelegates(AppCompatDrawableManager.Java:268)
at Android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.Java:178)
at Android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.Java:173)
at Android.support.v7.view.menu.MenuItemImpl.getIcon(MenuItemImpl.Java:421)
at Android.support.v7.view.menu.ActionMenuItemView.initialize(ActionMenuItemView.Java:114)
at Android.support.v7.widget.ActionMenuPresenter.bindItemView(ActionMenuPresenter.Java:206)
at Android.support.v7.view.menu.BaseMenuPresenter.getItemView(BaseMenuPresenter.Java:182)
at Android.support.v7.widget.ActionMenuPresenter.getItemView(ActionMenuPresenter.Java:192)
at  Android.support.v7.widget.ActionMenuPresenter.flagActionItems(ActionMenuPresenter.Java:480)
at Android.support.v7.view.menu.MenuBuilder.flagActionItems(MenuBuilder.Java:1138)
at Android.support.v7.view.menu.BaseMenuPresenter.updateMenuView(BaseMenuPresenter.Java:91)
at Android.support.v7.widget.ActionMenuPresenter.updateMenuView(ActionMenuPresenter.Java:229)
at Android.support.v7.view.menu.MenuBuilder.dispatchPresenterUpdate(MenuBuilder.Java:284)
at Android.support.v7.view.menu.MenuBuilder.onItemsChanged(MenuBuilder.Java:1030)
at Android.support.v7.view.menu.MenuBuilder.startDispatchingItemsChanged(MenuBuilder.Java:1053)
at Android.support.v7.app.AppCompatDelegateImplV7.preparePanel(AppCompatDelegateImplV7.Java:1345)
at Android.support.v7.app.AppCompatDelegateImplV7.doInvalidatePanelMenu(AppCompatDelegateImplV7.Java:1583)
at Android.support.v7.app.AppCompatDelegateImplV7.access$100(AppCompatDelegateImplV7.Java:89)
at Android.support.v7.app.AppCompatDelegateImplV7$1.run(AppCompatDelegateImplV7.Java:128)
at Android.os.Handler.handleCallback(Handler.Java:733)
at Android.os.Handler.dispatchMessage(Handler.Java:95)
at Android.os.Looper.loop(Looper.Java:146)
at Android.app.ActivityThread.main(ActivityThread.Java:5653)
at Java.lang.reflect.Method.invokeNative(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:515)
at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:1291)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:110)

navigationView

Process: org.ligi.gobandroid_hd, PID: 11473
Java.lang.RuntimeException: Unable to start activity ComponentInfo{org.ligi.gobandroid_hd/org.ligi.gobandroid_hd.ui.game_setup.GoSetupActivity}: Android.view.InflateException: Binary XML file line #20: Error inflating class Android.support.design.widget.NavigationView
    at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2404)
    at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2464)
    at Android.app.ActivityThread.access$900(ActivityThread.Java:172)
    at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1308)
    at Android.os.Handler.dispatchMessage(Handler.Java:102)
    at Android.os.Looper.loop(Looper.Java:146)
    at Android.app.ActivityThread.main(ActivityThread.Java:5653)
    at Java.lang.reflect.Method.invokeNative(Native Method)
    at Java.lang.reflect.Method.invoke(Method.Java:515)
    at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:1291)
    at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:1107)
    at dalvik.system.NativeStart.main(Native Method)
 Caused by: Android.view.InflateException: Binary XML file line #20: Error inflating class Android.support.design.widget.NavigationView
    at Android.view.LayoutInflater.createView(LayoutInflater.Java:626)
    at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:702)
    at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:761)
    at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:769)
    at Android.view.LayoutInflater.inflate(LayoutInflater.Java:498)
    at Android.view.LayoutInflater.inflate(LayoutInflater.Java:398)
    at Android.view.LayoutInflater.inflate(LayoutInflater.Java:354)
    at Android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.Java:267)
    at Android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.Java:129)
    at org.ligi.gobandroid_hd.ui.application.GobandroidFragmentActivity.setContentView(GobandroidFragmentActivity.Java:85)
    at org.ligi.gobandroid_hd.ui.GoActivity.onCreate(GoActivity.Java:108)
    at Android.app.Activity.performCreate(Activity.Java:5541)
    at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1093)
    at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2368)
    at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2464) 
    at Android.app.ActivityThread.access$900(ActivityThread.Java:172) 
    at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1308) 
    at Android.os.Handler.dispatchMessage(Handler.Java:102) 
    at Android.os.Looper.loop(Looper.Java:146) 
    at Android.app.ActivityThread.main(ActivityThread.Java:5653) 
    at Java.lang.reflect.Method.invokeNative(Native Method) 
    at Java.lang.reflect.Method.invoke(Method.Java:515) 
    at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:1291) 
    at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:1107) 
    at dalvik.system.NativeStart.main(Native Method) 
 Caused by: Java.lang.reflect.InvocationTargetException
    at Java.lang.reflect.Constructor.constructNative(Native Method)
    at Java.lang.reflect.Constructor.newInstance(Constructor.Java:423)
    at Android.view.LayoutInflater.createView(LayoutInflater.Java:600)
    at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:702) 
    at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:761) 
    at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:769) 
    at Android.view.LayoutInflater.inflate(LayoutInflater.Java:498) 
    at Android.view.LayoutInflater.inflate(LayoutInflater.Java:398) 
    at Android.view.LayoutInflater.inflate(LayoutInflater.Java:354) 
    at Android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.Java:267) 
    at Android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.Java:129) 
    at org.ligi.gobandroid_hd.ui.application.GobandroidFragmentActivity.setContentView(GobandroidFragmentActivity.Java:85) 
    at org.ligi.gobandroid_hd.ui.GoActivity.onCreate(GoActivity.Java:108) 
    at Android.app.Activity.performCreate(Activity.Java:5541) 
    at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1093) 
    at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2368) 
    at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2464) 
    at Android.app.ActivityThread.access$900(ActivityThread.Java:172) 
    at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1308) 
    at Android.os.Handler.dispatchMessage(Handler.Java:102) 
    at Android.os.Looper.loop(Looper.Java:146) 
    at Android.app.ActivityThread.main(ActivityThread.Java:5653) 
    at Java.lang.reflect.Method.invokeNative(Native Method) 
    at Java.lang.reflect.Method.invoke(Method.Java:515) 
    at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:1291) 
    at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:1107) 
    at dalvik.system.NativeStart.main(Native Method) 
 Caused by: Android.content.res.Resources$NotFoundException: Resource ID #0x7f020067
    at Android.content.res.Resources.getValue(Resources.Java:2305)
    at Android.support.v7.widget.AppCompatDrawableManager.loadDrawableFromDelegates(AppCompatDrawableManager.Java:268)
    at Android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.Java:178)
    at Android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.Java:173)
    at Android.support.v7.view.menu.MenuItemImpl.getIcon(MenuItemImpl.Java:421)
    at Android.support.design.internal.NavigationMenuPresenter$NavigationMenuAdapter.prepareMenuItems(NavigationMenuPresenter.Java:475)
    at Android.support.design.internal.NavigationMenuPresenter$NavigationMenuAdapter.update(NavigationMenuPresenter.Java:436)
    at Android.support.design.internal.NavigationMenuPresenter.updateMenuView(NavigationMenuPresenter.Java:112)
    at Android.support.design.widget.NavigationView.inflateMenu(NavigationView.Java:241)
    at Android.support.design.widget.NavigationView.<init>(NavigationView.Java:169)
    at Android.support.design.widget.NavigationView.<init>(NavigationView.Java:95)
    at Java.lang.reflect.Constructor.constructNative(Native Method) 
    at Java.lang.reflect.Constructor.newInstance(Constructor.Java:423) 
    at Android.view.LayoutInflater.createView(LayoutInflater.Java:600) 
    at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:702) 
    at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:761) 
    at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:769) 
    at Android.view.LayoutInflater.inflate(LayoutInflater.Java:498) 
    at Android.view.LayoutInflater.inflate(LayoutInflater.Java:398) 
    at Android.view.LayoutInflater.inflate(LayoutInflater.Java:354) 
    at Android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.Java:267) 
    at Android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.Java:129) 
    at org.ligi.gobandroid_hd.ui.application.GobandroidFragmentActivity.setContentView(GobandroidFragmentActivity.Java:85) 
    at org.ligi.gobandroid_hd.ui.GoActivity.onCreate(GoActivity.Java:108) 
    at Android.app.Activity.performCreate(Activity.Java:5541) 
    at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1093) 
    at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2368) 
    at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2464) 
    at Android.app.ActivityThread.access$900(ActivityThread.Java:172) 
    at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1308) 
    at Android.os.Handler.dispatchMessage(Handler.Java:102) 
    at Android.os.Looper.loop(Looper.Java:146) 
    at Android.app.ActivityThread.main(ActivityThread.Java:5653) 
    at Java.lang.reflect.Method.invokeNative(Native Method) 
    at Java.lang.reflect.Method.invoke(Method.Java:515) 
    at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:1291) 
    at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:1107) 
    at dalvik.system.NativeStart.main(Native Method) 
18
ligi

私は問題を見つけました:drawable-anydpi /にベクタードローアブルがあります-これによりこのクラッシュが発生します-ドローアブルをドローアブルに移動すると、正常に動作します

33
ligi

Lollipopより前のバージョンをサポートするには、

com.Android.support:appcompat-v7:24.0.0(またはそれ以降)

サポートライブラリ。

そして、代わりに

ContextCompat.getDrawable(view.getContext(), id);

これを使う

AppCompatResources.getDrawable(view.getContext(), id);
35
Rakshith Kumar

StateListDrawable(セレクター)でそれらをラップすることにより、pre-Lollipopデバイスでベクタードローアブルを使用することができました。

より正確には、XMLでセレクタードローアブルを作成してから、単一のベクタードローアブルを追加しました。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:drawable="@drawable/vector_ic_action_add" />
</selector>

次に、この「ラップされた」ドローアブルをメニューで使用します。動作の詳細については、Chris Banesによる this 非常に役立つ投稿をご覧ください。

5

この問題を修正するには、アプリケーションの起動時に次のコードを追加する必要がありました(アプリケーションサブクラス)。

AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);

に加えて :

  • app:srcCompatの代わりにAndroid:srcをレイアウト定義(私の場合はImageButtonビュー)で使用します。
  • Gradleでアクティブ化:vectorDrawables.useSupportLibrary = true
4
Virtual

私がドキュメントで読んだ限り、ImageViewにはXMLアクセスしかありません。

メニューについては、Javaで使用する必要があります。

toolbar.inflateMenu(menuResId);
toolbar.getMenu()
       .findItem(menuItemId)
       .setIcon(VectorDrawableCompat
                       .createFromResource(resource, drawableId);
4
Budius

私は同じ問題に直面しましたが、何時間も無駄にして問題が解決しました

  1. ドローアブルを削除して、ドローアブルがあることを確認してください
  2. Build.gradleでの使用

    defaultConfig {vectorDrawables.useSupportLibrary = true}

    1. 以下のように、セットベクトルをImageViewに描画可能にします。
      <ImageView Android:id="@+id/ivLogo" Android:layout_width="100dp" Android:layout_height="100dp" Android:background="@drawable/your_selector" app:srcCompat="@drawable/ic_your_vector_logo" />

    2. アクティビティは、ActivityではなくAppCompatActiviityを拡張する必要があります

私はあなたの問題が解決したことを望みます。

0
Ness Tyagi

VectorDrawableComaptを使用してXMLで設定する場合は、正しい方法で行うことを忘れないでください。

app:srcCompat="@drawable/ic_add"

出典: https://Android-developers.blogspot.co.uk/2016/02/Android-support-library-232.html

0
Clive Jefferies