错误膨胀类android.support.design.widget.NavigationView

我遵循支持devise库中的新组件NavigationView的教程,无法通过此错误消息:

Error inflating class android.support.design.widget.NavigationView 

我在这里尝试了所有的解决方法

使用任何Androiddevise支持库元素时出错

但错误消息仍然存在。

XML

 <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" > <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" > <include layout="@layout/toolbar" android:id="@+id/mainToolBar" /> <fragment android:name="com.ais.cherry.fragment.LoginFragment" android:id="@+id/loginFragment" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/mainToolBar" /> <fragment android:name="com.ais.cherry.fragment.WaterFallFragment" android:id="@+id/mainFragment" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/mainToolBar" /> <fragment android:name="com.ais.cherry.fragment.SearchFragment" android:id="@+id/searchFragment" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/mainToolBar" /> <fragment android:name="com.ais.cherry.fragment.ChatMainFragment" android:id="@+id/chatMainFragment" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/mainToolBar" /> <fragment android:name="com.ais.cherry.fragment.ProfileFragment" android:id="@+id/profileFragment" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/mainToolBar" /> <android.support.design.widget.NavigationView android:id="@+id/nav_view" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="start" android:background="@android:color/white" app:itemTextColor="#212121" app:headerLayout="@layout/drawer_header" app:menu="@menu/drawer" /> </android.support.v4.widget.DrawerLayout> 

的build.gradle

 buildscript { repositories { mavenCentral() maven { url 'https://maven.fabric.io/public' } } dependencies { classpath 'io.fabric.tools:gradle:1.+' classpath 'com.android.tools.build:gradle:1.2.3' } } compileSdkVersion 22 buildToolsVersion "22.0.1" defaultConfig { applicationId "com.ais.cherry" minSdkVersion 16 targetSdkVersion 22 multiDexEnabled true renderscriptTargetApi 22 renderscriptSupportModeEnabled true } dependencies { compile 'com.android.support:appcompat-v7:22.2.0' compile 'com.android.support:support-v4:22.2.0' compile 'com.android.support:design:22.2.0' compile 'com.android.support:recyclerview-v7:22.2.0' } 

项目build.gradle

 buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:1.2.3' } } 

styles.xml

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

 <!-- Base application theme. --> <style name="AppTheme" parent="AppTheme.Base"> </style> <style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:windowActionBarOverlay">true</item> <item name="android:windowActionModeOverlay">true</item> <item name="android:actionModeStyle">@style/AppTheme.ActionModeStyle</item> <item name="android:windowActionBar">false</item> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> <item name="android:windowNoTitle">true</item> <!-- Support library compatibility --> <item name="windowActionBarOverlay">true</item> <!-- ActionBar color --> <item name="colorPrimary">#E91E63</item> <!-- Status bar color --> <item name="colorPrimaryDark">#C2185B</item> <!-- Window color --> <item name="android:windowBackground">@color/white</item> <!-- ActionBar title text --> <item name="android:titleTextStyle">@style/AppTheme.MyActionBarTitleText</item> <item name="colorAccent">#9E9E9E</item> <item name="drawerArrowStyle">@style/AppTheme.MyDrawerArrowStyle</item> <!-- color for actionMenu--> <item name="actionMenuTextColor">#FFFFFF</item> <item name="android:actionMenuTextColor">#FFFFFF</item> <!-- android:textColorSecondary is the color of the menu overflow icon (three vertical dots) --> <item name="android:textColorPrimary">#212121</item> <item name="android:textColorSecondary">#FFFFFF</item> <!--Navigation bar color--> <item name="android:navigationBarColor">#E91E63</item> <!--Status bar color--> <item name="android:statusBarColor">#C2185B</item> </style> 

任何帮助,将不胜感激!

编辑 – 添加@ menu / drawer&@ menu / drawer_header&stacktrace

drawer.xml

 <menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android:checkableBehavior="single"> <item android:id="@+id/nav_first_fragment" android:icon="@drawable/home_view" android:checked="true" android:title="@string/main"/> <item android:id="@+id/nav_second_fragment" android:icon="@drawable/comment_view" android:title="@string/chat"/> <item android:id="@+id/nav_third_fragment" android:icon="@drawable/user_view" android:title="@string/profile"/> <item android:title="@string/search"> <menu> <item android:title="@string/clothes"/> <item android:title="@string/pants"/> </menu> </item> </group> </menu> 

drawer_header.xml

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="192dp" android:background="?attr/colorPrimaryDark" android:padding="16dp" android:theme="@style/ThemeOverlay.AppCompat.Dark" android:gravity="bottom"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/title" android:textColor="@android:color/white" android:textAppearance="@style/TextAppearance.AppCompat.Body1"/> </LinearLayout> 

StackTrace(只有一部分)

它抛出了三个exception,如下所示:所有问题都是由layout.xml中的“setContentView(layout)”行引起的。

 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ais.cherry/com.ais.cherry.activity.FirstActivity}: android.view.InflateException: Binary XML file line #32: Error inflating class android.support.design.widget.NavigationView Caused by: android.view.InflateException: Binary XML file line #32: Error inflating class android.support.design.widget.NavigationView Caused by: java.lang.reflect.InvocationTargetException Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x0 

实际上这不是appcompat问题,升级或降级依赖关系。当你的appcompat库和devise支持库的版本不匹配时,这个问题可能会发生。

匹配条件的例子

 compile 'com.android.support:appcompat-v7:23.1.1' // appcompat library compile 'com.android.support:design:23.1.1' //design support library 

我有类似的错误。 当我使用

 <style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorPrimary">#673AB7</item> <item name="colorPrimaryDark">#512DA8</item> <item name="colorAccent">#00BCD4</item> <item name="android:textColorPrimary">#212121</item> <item name="android:textColorSecondary">#727272</item> </style> 

适用于我当我删除android:textColorPrimary和android:textColorSecondary主题项目。

 <style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorPrimary">#673AB7</item> <item name="colorPrimaryDark">#512DA8</item> <item name="colorAccent">#00BCD4</item> </style> 

尝试使用一个非常简单的应用程序主题开始。

编辑:

本教程将有所帮助。 我的理解是使用“android:textColorPrimary”需要最低api级别21.使用不带“android:”的相同标签使用devise支持库。 任何支持库小部件将尝试find“textColorPrimary”项而不是“android:textColorPrimary”,如果它找不到相同的,则抛出上述错误。

我也有同样的错误。 在我的情况下,一些资源只能在v21中使用。 也将这些资源复制到可绘制文件夹。 这为我解决了这个问题。

 Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x0 

这是主要的问题。

我有同样的错误,我解决了它通过添加app:itemTextColor="@color/a_color"到我的导航视图:

 <android.support.design.widget.NavigationView android:id="@+id/navigation_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="left" app:headerLayout="@layout/layout_drawer_header" app:menu="@menu/drawer_menu" app:itemTextColor="@color/primary"/> 

你仍然可以在你的主题中使用android:textColorPrimaryandroid:textColorSecondary

我解决了它从gradle降级

 compile 'com.android.support:design:23.1.0' 

 compile 'com.android.support:design:23.0.1' 

当我更新Android Studio的任何组件时,似乎总是遇到问题。 厌倦了它。

那么所以我试图解决这个错误。 没有人为我工作。 我无法找出解决办法。 场景:

我只是想在Android Studio 2.1.2中创build一个Navigation Drawer Project 。当我尝试更改nav_header_main.xml的默认Android图标时, nav_header_main.xml了一些奇怪的错误。 我发现我把我的PNG徽标放在...\app\src\main\res\drawable-21 。 当我尝试将我的PNG徽标放入...\app\src\main\res\drawable bam! 所有奇怪的错误消失。

以下是我将PNG放入drawable-21文件夹时的一些堆栈跟踪:

 08-17 17:29:56.237 6644-6678/myAppName E/dalvikvm: Could not find class 'android.util.ArrayMap', referenced from method com.android.tools.fd.runtime.Restarter.getActivities 08-17 17:30:01.674 6644-6644/myAppName E/AndroidRuntime: FATAL EXCEPTION: main java.lang.RuntimeException: Unable to start activity ComponentInfo{myAppName.MainActivity}: android.view.InflateException: Binary XML file line #16: Error inflating class <unknown> at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2372) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2424) at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3956) at android.app.ActivityThread.access$700(ActivityThread.java:169) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1394) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:194) at android.app.ActivityThread.main(ActivityThread.java:5433) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:525) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:924) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:691) at dalvik.system.NativeStart.main(Native Method) Caused by: android.view.InflateException: Binary XML file line #16: Error inflating class <unknown> at android.view.LayoutInflater.createView(LayoutInflater.java:613) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687) at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) at android.view.LayoutInflater.inflate(LayoutInflater.java:489) at android.view.LayoutInflater.inflate(LayoutInflater.java:396) at android.view.LayoutInflater.inflate(LayoutInflater.java:352) at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:280) at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140) at edu.uswat.fwd82.findmedoc.MainActivity.onCreate(MainActivity.java:22) at android.app.Activity.performCreate(Activity.java:5179) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1146) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2336) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2424) at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3956) at android.app.ActivityThread.access$700(ActivityThread.java:169) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1394) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:194) at android.app.ActivityThread.main(ActivityThread.java:5433) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:525) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:924) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:691) 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:417) at android.view.LayoutInflater.createView(LayoutInflater.java:587) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687) at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) at android.view.LayoutInflater.inflate(LayoutInflater.java:489) at android.view.LayoutInflater.inflate(LayoutInflater.java:396) at android.view.LayoutInflater.inflate(LayoutInflater.java:352) at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:280) at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140) at edu.uswat.fwd82.findmedoc.MainActivity.onCreate(MainActivity.java:22) at android.app.Activity.performCreate(Activity.java:5179) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1146) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2336) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2424) at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3956) at android.app.ActivityThread.access$700(ActivityThread.java:169) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1394) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:194) at android.app.ActivityThread.main(ActivityThread.java:5433) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:525) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:924) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:691) at dalvik.system.NativeStart.main(Native Method) Caused by: android.view.InflateException: Binary XML file line #14: Error inflating class ImageView at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) at android.view.LayoutInflater.inflate(LayoutInflater.java:489) at android.view.LayoutInflater.inflate(LayoutInflater.java:396) at android.support.design.internal.NavigationMenuPresenter.inflateHeaderView(NavigationMenuPresenter.java:189) at android.support.design.widget.NavigationView.inflateHeaderView(NavigationView.java:262) at android.support.design.widget.NavigationView.<init>(NavigationView.java:173) 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:417) at android.view.LayoutInflater.createView(LayoutInflater.java:587) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687) at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) at android.view.LayoutInflater.inflate(LayoutInflater.java:489) at android.view.LayoutInflater.inflate(LayoutInflater.java:396) at android.view.LayoutInflater.inflate(LayoutInflater.java:352) at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:280) at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140) at edu.uswat.fwd82.findmedoc.MainActivity.onCreate(MainActivity.java:22) at android.app.Activity.performCreate(Activity.java:5179) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1146) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2336) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2424) at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3956) at android.app.ActivityThread.access$700(ActivityThread.java:169) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1394) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:194) at android.app.ActivityThread.main(ActivityThread.java:5433) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:525) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:924) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:691) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.NullPointerException at android.content.res.ResourcesEx.getThemeDrawable(ResourcesEx.java:459) at android.content.res.ResourcesEx.loadDrawable(ResourcesEx.java:435) at android.content.res.TypedArray.getDrawable(TypedArray.java:609) at android.widget.ImageView.<init>(ImageView.java:120) at android.support.v7.widget.AppCompatImageView.<init>(AppCompatImageView.java:57) at android.support.v7.widget.AppCompatImageView.<init>(AppCompatImageView.java:53) at android.support.v7.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:106) at android.support.v7.app.AppCompatDelegateImplV7.createView(AppCompatDelegateImplV7.java:980) at android.support.v7.app.AppCompatDelegateImplV7.onCreateView(AppCompatDelegateImplV7.java:1039) at android.support.v4.view.LayoutInflaterCompatHC$FactoryWrapperHC.onCreateView(LayoutInflaterCompatHC.java:44) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java: 

正如你可以看到上面的堆栈跟踪包括:

android.support.design.widget.NavigationView。(NavigationView.java:173)android.support.design.widget.NavigationView。(NavigationView。)中的android.support.design.widget.NavigationView.inflateHeaderView(NavigationView.java:262) Java的:95)

上述修补程序都没有为我工作。

对我有效的是改变

 <item name="android:textColorSecondary">#FFFFFF</item> 

 <item name="android:textColorSecondary">@color/colorWhite</item> 

您显然需要在您的colors.xml中添加colorWhite

对我来说,我多次遇到这个错误,

错误膨胀类android.support.design.widget.NavigationView #28和#29

这个解决scheme适用于我,您必须匹配您的支持devise库和支持appcompat库。

compile 'com.android.support:appcompat-v7:23.1.1'

compile 'com.android.support:design:23.1.1'

对我来说,他们必须匹配。 :) 这个对我有用!

只是为了谁还有这个问题。 我遇到了同样的问题,但是这里所有的解决scheme都不适合我。

只要从logcat的cue中带上NavigationView类,我发现问题来自这行代码:

 itemTextColor = this.createDefaultColorStateList(16842806); 

所以,这似乎与Ateur56提到的itemTextColor有关。 所以我尝试了Aenur56的解决scheme,但它不起作用。

看看上面的代码行,我注意到有ColorStateList。 所以我创build一个然后设置itemTextColor然后它的工作。

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:color="#00FF00" android:state_checked="true" /> <item android:color="#000000" /> </selector> 

希望它有帮助!

上面的解决scheme都没有帮助我。 我发现这个在其他网页上,它为我工作 – “在devise库设置目标为21或最高可用的project.properties,然后清理devise库,appcomapt和你的项目,享受”

希望它会帮助!

正如Parag Naik正确地提到的(并且LạngHoàng扩展了),将textColorPrimary设置为除颜色状态列表之外的其他内容时会出现问题。 所以你可以将textColorPrimary设置为状态列表。 android bug跟踪器中有一个关于colorPrimary是一个只有一种颜色的状态列表: https : //code.google.com/p/android/issues/detail? id = 172353

所以对于styles.xml中的主题:

 <style name="Base.Theme.Hopster" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorPrimary">@color/primary</item> <item name="colorPrimaryDark">@color/primary_dark</item> <item name="colorAccent">@color/accent</item> <item name="android:textColorPrimary">@color/primary_color_statelist</item> </style> 

和实际的primary_color_statelist.xml文件:

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- This is used when the Navigation Item is checked --> <item android:color="@color/primary_text_selected" android:state_checked="true" /> <!-- This is the default text color --> <item android:color="@color/primary_text" /> </selector> 

升级支持库后,我遇到了同样的问题,没有答案为我工作。 最后,我解决了下载最新版本的构build工具,并在build.gradle中升级buildToolsVersion "23.0.1"

BETTER I UPGRADED com.android.support:appcompat-v7:23.1.0

正如@Ton所说的降级compile 'com.android.support:design:23.1.0'

但为什么不升级 com.android.support:appcompat-v7:23.1.1

最后升级为我工作享受

 compile 'com.android.support:appcompat-v7:23.1.1' compile 'com.android.support:design:23.1.1' 

那么为什么要使用较旧的库。 我认为现在更好的使用devise和紧凑升级。

我也有这个相同的问题,看了近3个小时后,我发现问题是在我的drawable_menu.xml文件,它写错了:D

这个错误可能是由于下面提到的原因造成的。

  1. 当您的appcompat库和devise支持库的版本不匹配时,可能会出现此问题。 匹配条件的例子

      compile 'com.android.support:appcompat-v7:24.2.0' // appcompat library compile 'com.android.support:design:24.2.0' //design support library 
  2. 如果你的风格的主题文件只有这两个,

      <item name="colorPrimary">#4A0958</item> <item name="colorPrimaryDark">#4A0958</item> 

然后添加ColorAccent。 它应该看起来像这样。

  <style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorPrimary">#4A0958</item> <item name="colorPrimaryDark">#4A0958</item> <item name="colorAccent">#4A0958</item> </style> 

有一件事要仔细检查一下,你是否已经在你的AndroidManifest.xml文件中正确应用了你的主题。 在我的情况下,我省略了android:theme属性。 例如:

 <application ... android:theme="@style/Your.Theme.Here" ... >