Android兼容-NavigationView报错

2020-05-23  本文已影响0人  晚路歌

Android API 22 在真机上运行时报错,报错信息如下:

05-23 17:27:50.308 23158-23158/com.example.kotlin.squaredgongge E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.kotlin.squaredgongge, PID: 23158
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.kotlin.squaredgongge/com.example.kotlin.squaredgongge.MaterialDesignActivity}: android.view.InflateException: Binary XML file line #52: Error inflating class com.google.android.material.navigation.NavigationView
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2404)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2466)
        at android.app.ActivityThread.access$900(ActivityThread.java:175)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1369)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5418)
        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:1037)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832)
     Caused by: android.view.InflateException: Binary XML file line #52: Error inflating class com.google.android.material.navigation.NavigationView
        at android.view.LayoutInflater.createView(LayoutInflater.java:642)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:788)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:851)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:510)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:420)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:371)
        at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555)
        at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161)
        at com.example.kotlin.squaredgongge.MaterialDesignActivity.onCreate(MaterialDesignActivity.java:38)
        at android.app.Activity.performCreate(Activity.java:6083)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1115)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2357)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2466) 
        at android.app.ActivityThread.access$900(ActivityThread.java:175) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1369) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:135) 
        at android.app.ActivityThread.main(ActivityThread.java:5418) 
        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:1037) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832) 
     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:616)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:788) 
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:851) 
        at android.view.LayoutInflater.inflate(LayoutInflater.java:510) 
        at android.view.LayoutInflater.inflate(LayoutInflater.java:420) 
        at android.view.LayoutInflater.inflate(LayoutInflater.java:371) 
        at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555) 
        at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161) 
        at com.example.kotlin.squaredgongge.MaterialDesignActivity.onCreate(MaterialDesignActivity.java:38) 
        at android.app.Activity.performCreate(Activity.java:6083) 
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1115) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2357) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2466) 
        at android.app.ActivityThread.access$900(ActivityThread.java:175) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1369) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:135) 
        at android.app.ActivityThread.main(ActivityThread.java:5418) 
        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:1037) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832) 
     Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x7f070071
        at android.content.res.Resources.getValue(Resources.java:1289)
        at android.content.res.VivoResources.getValue(VivoResources.java:191)
        at androidx.appcompat.widget.ResourceManagerInternal.loadDrawableFromDelegates(ResourceManagerInternal.java:252)
        at androidx.appcompat.widget.ResourceManagerInternal.getDrawable(ResourceManagerInternal.java:139)
        at androidx.appcompat.widget.ResourceManagerInternal.getDrawable(ResourceManagerInternal.java:132)
        at androidx.appcompat.content.res.AppCompatResources.getDrawable(AppCompatResources.java:104)
        at androidx.appcompat.view.menu.MenuItemImpl.getIcon(MenuItemImpl.java:505)
        at com.google.android.material.internal.NavigationMenuPresenter$NavigationMenuAdapter.prepareMenuItems(NavigationMenuPresenter.java:605)
        at com.google.android.material.internal.NavigationMenuPresenter$NavigationMenuAdapter.update(NavigationMenuPresenter.java:546)
        at com.google.android.material.internal.NavigationMenuPresenter.updateMenuView(NavigationMenuPresenter.java:128)
        at com.google.android.material.navigation.NavigationView.inflateMenu(NavigationView.java:368)
        at com.google.android.material.navigation.NavigationView.<init>(NavigationView.java:234)
        at com.google.android.material.navigation.NavigationView.<init>(NavigationView.java:121)
        at java.lang.reflect.Constructor.newInstance(Native Method) 
        at java.lang.reflect.Constructor.newInstance(Constructor.java:288) 
        at android.view.LayoutInflater.createView(LayoutInflater.java:616) 
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:788) 
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:851) 
        at android.view.LayoutInflater.inflate(LayoutInflater.java:510) 
        at android.view.LayoutInflater.inflate(LayoutInflater.java:420) 
        at android.view.LayoutInflater.inflate(LayoutInflater.java:371) 
        at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:555) 
        at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:161) 
        at com.example.kotlin.squaredgongge.MaterialDesignActivity.onCreate(MaterialDesignActivity.java:38) 
        at android.app.Activity.performCreate(Activity.java:6083) 
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1115) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2357) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2466) 
        at android.app.ActivityThread.access$900(ActivityThread.java:175) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1369) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:135) 
        at android.app.ActivityThread.main(ActivityThread.java:5418) 
        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:1037) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:832) 

最后发现也是资源的问题,图片放在draw中在API 22真机运行时报错了,但是在API 29上的模拟器运行时,运行是正常的。

NavigationView注意事项

    <com.google.android.material.navigation.NavigationView
        android:id="@+id/nav_activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:headerLayout="@layout/nav_head"
        app:menu="@menu/nav_menu" />

一定要加上android:layout_gravity,否则侧边栏占据了整个页面把主页面区域都覆盖住了而且设置宽高无效

android:layout_gravity="start"

NavigationView Item点击事件

在java/kotlin文件中加入setNavigationItemSelectedListener

上一篇 下一篇

猜你喜欢

热点阅读