如何更改android studio中导航抽屉中菜单项的图标?

时间:2016-07-03 19:15:53

标签: java android navigation-drawer

我正在尝试更改导航抽屉活动菜单上的图标。 MainActivity.java与默认值相同。图标例如:medbox,medicine,appointment,doctor,me,settings是我放在Drawable-v21文件夹中的.png文件。 该项目正在构建,但我得到以下运行时异常:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.shradha.mediday/com.example.shradha.mediday.MainActivity}: android.view.InflateException: Binary XML file line #16: Error inflating class android.support.design.widget.NavigationView

Caused by: android.view.InflateException: Binary XML file line #16: Error inflating class android.support.design.widget.NavigationView

Caused by: java.lang.reflect.InvocationTargetException

Caused by: android.content.res.Resources$NotFoundException: Resource is not a Drawable (color or path): TypedValue{t=0x1/d=0x7f020056 a=3 r=0x7f020056}

我已经尝试了几乎所有关于堆栈溢出的解决方案,但我无法摆脱这一点。 这是activity_main_drawer.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

<group android:checkableBehavior="single">

    <item
        android:id="@+id/medbox"
        android:icon="@drawable/medbox"
        android:title="@string/pillbox" />
    <item
        android:id="@+id/medicine"
        android:icon="@drawable/medicine"
        android:title="@string/medications" />
    <item
        android:id="@+id/appointment"
        android:icon="@drawable/appointment"
        android:title="@string/appointments" />
    <item
        android:id="@+id/doctor"
        android:icon="@drawable/doctor"
        android:title="@string/doctors" />
</group>

<item android:title="Communicate">
    <menu>
        <item
            android:id="@+id/me"
            android:icon="@drawable/me"
            android:title="@string/me" />
        <item
            android:id="@+id/settings"
            android:icon="@drawable/settings"
            android:title="@string/settings" />
    </menu>
</item>

</menu>

这是drawables.xml

<resources xmlns:android="http://schemas.android.com/apk/res/android">
<item name="medbox" type="drawable">@drawable/medbox</item>
<item name="medicine" type="drawable">@drawable/medicine</item>
<item name="appointment" type="drawable">@drawable/appointment</item>
<item name="doctor" type="drawable">@drawable/doctor</item>
<item name="me" type="drawable">@drawable/me</item>
<item name="settings" type="drawable">@drawable/settings</item>

</resources>

编辑:使用nav_view进行布局

<?xml version="1.0" encoding="utf-8"?>

<android.support.v4.widget.DrawerLayout    
    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/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">

<include
    layout="@layout/app_bar_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

<android.support.design.widget.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:fitsSystemWindows="true"
    app:headerLayout="@layout/nav_header_main"
    app:menu="@menu/activity_main_drawer" />

</android.support.v4.widget.DrawerLayout>

styles.xml:

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

<style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

<style name="AppTheme.AppBarOverlay" 
parent="ThemeOverlay.AppCompat.Dark.ActionBar" />

<style name="AppTheme.PopupOverlay" 
parent="ThemeOverlay.AppCompat.Light" />

</resources>

整个堆栈跟踪:

Process: com.example.shradha.mediday, PID: 30514

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.shradha.mediday/com.example.shradha.mediday.MainAct    ivity}: android.view.InflateException: Binary XML file line #16: Error   inflating class android.support.design.widget.NavigationView
                                                                             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2338)
                                                                             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)
                                                                             at android.app.ActivityThread.access$800(ActivityThread.java:151)
                                                                             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321)
                                                                             at android.os.Handler.dispatchMessage(Handler.java:110)
                                                                             at android.os.Looper.loop(Looper.java:193)
                                                                             at android.app.ActivityThread.main(ActivityThread.java:5292)
                                                                             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:824)
                                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
                                                                             at dalvik.system.NativeStart.main(Native Method)
                                                                          Caused by: android.view.InflateException: Binary XML file line #16: Error inflating class android.support.design.widget.NavigationView
                                                                             at android.view.LayoutInflater.createView(LayoutInflater.java:620)
                                                                             at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
                                                                             at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
                                                                             at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
                                                                             at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
                                                                             at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
                                                                             at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:280)
                                                                             at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)
                                                                             at com.example.shradha.mediday.MainActivity.onCreate(MainActivity.java:24)
                                                                             at android.app.Activity.performCreate(Activity.java:5264)
                                                                             at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088)
                                                                             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2302)
                                                                             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390) 
                                                                             at android.app.ActivityThread.access$800(ActivityThread.java:151) 
                                                                             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321) 
                                                                             at android.os.Handler.dispatchMessage(Handler.java:110) 
                                                                             at android.os.Looper.loop(Looper.java:193) 
                                                                             at android.app.ActivityThread.main(ActivityThread.java:5292) 
                                                                             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:824) 
                                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640) 
                                                                             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:594)
                                                                             at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696) 
                                                                             at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 
                                                                             at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
                                                                             at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
                                                                             at android.view.LayoutInflater.inflate(LayoutInflater.java:353) 
                                                                             at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:280) 
                                                                             at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140) 
                                                                             at com.example.shradha.mediday.MainActivity.onCreate(MainActivity.java:24) 
                                                                             at android.app.Activity.performCreate(Activity.java:5264) 
                                                                             at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088) 
                                                                             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2302) 
                                                                             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390) 
                                                                             at android.app.ActivityThread.access$800(ActivityThread.java:151) 
                                                                             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321) 
                                                                             at android.os.Handler.dispatchMessage(Handler.java:110) 
                                                                             at android.os.Looper.loop(Looper.java:193) 
                                                                             at android.app.ActivityThread.main(ActivityThread.java:5292) 
                                                                             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:824) 
                                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640) 
                                                                             at dalvik.system.NativeStart.main(Native Method) 
                                                                          Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x7f020057
                                                                             at android.content.res.Resources.getValue(Resources.java:1133)
                                                                             at android.support.v7.widget.AppCompatDrawableManager.loadDrawableFromDelegates(AppCompatDrawableManager.java:321)
                                                                             at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:197)
                                                                             at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:192)
                                                                             at android.support.v7.view.menu.MenuItemImpl.getIcon(MenuItemImpl.java:421)
                                                                             at android.support.design.internal.NavigationMenuPresenter$NavigationMenuAdapter.prepareMenuItems(NavigationMenuPresenter.java:495)
                                                                             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:245)
                                                                             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:594) 
                                                                             at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696) 
                                                                             at android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 
                                                                             at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
                                                                             at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
                                                                             at android.view.LayoutInflater.inflate(LayoutInflater.java:353) 
                                                                             at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:280) 
                                                                             at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140) 
                                                                             at com.example.shradha.mediday.MainActivity.onCreate(MainActivity.java:24) 
                                                                             at android.app.Activity.performCreate(Activity.java:5264) 
                                                                             at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088) 
                                                                             at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2302) 
                                                                             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390) 
                                                                             at android.app.ActivityThread.access$800(ActivityThread.java:151) 
                                                                             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321) 
                                                                             at android.os.Handler.dispatchMessage(Handler.java:110) 
                                                                             at android.os.Looper.loop(Looper.java:193) 
                                                                             at android.app.ActivityThread.main(ActivityThread.java:5292) 
                                                                             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:824) 
                                                                             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640) 
                                                                             at dalvik.system.NativeStart.main(Native Method) 

1 个答案:

答案 0 :(得分:0)

实际问题是您将png放在res/drawable-21中,因此前棒棒糖设备无法找到它,因此android.content.res.Resources$NotFoundException

将png文件从res/drawable-21复制到res/drawable