【问题标题】:Error inflating class android.support.v7.widget.Toolbar in Android Lollipop在 Android Lollipop 中膨胀类 android.support.v7.widget.Toolbar 时出错
【发布时间】:2017-02-15 20:49:29
【问题描述】:

我在我的项目中使用了 android.support 库,我使用 android 4.4 开发了我的应用程序,一切正常,但是当我尝试在装有 Android Lollipop 的设备上运行应用程序时出现了问题。

当它使用 Toolbar 加载 Activity 时,应用程序停止并返回此错误。

扩展类 android.support.v7.widget.Toolbar 时出错

我在互联网上发现了同样的问题,但我没有在答案中找到解决方案。

这是我的styles.xml

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
<!-- Base theme applied no matter what API -->
    <item name="android:windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/dark_primary</item>
    <item name="colorAccent">@color/accent_color</item>
</style>

这是我的 style.xml (v22)

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="android:Theme.Material.Light.NoActionBar">
        <item name="colorPrimary">@color/primary</item>
        <item name="colorPrimaryDark">@color/dark_primary</item>
        <item name="colorAccent">@color/accent_color</item>
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>
</resources>

在.xml中定义工具栏

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/mitoolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    local:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    local:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    tools:showIn="@layout/activity_main" />

在我的 MainActivty 中,我只包含那个工具栏:

<include layout="@layout/toolbar" />

最后是我的 MainActivity.java 的标题

public class MainActivity extends android.support.v7.app.ActionBarActivity
        implements NavigationDrawerFragment.NavigationDrawerCallbacks {

     super.onCreate(savedInstanceState);
     setContentView(R.layout.activity_main); //Here stops my application
}

这是日志猫

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.fitness.dullmonkey.keepingfit/com.fitness.dullmonkey.keepingfit.MainActivity}: android.view.InflateException: Binary XML file line #2: Error inflating class android.support.v7.widget.Toolbar
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2581)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2656)
            at android.app.ActivityThread.access$800(ActivityThread.java:178)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1512)
            at android.os.Handler.dispatchMessage(Handler.java:111)
            at android.os.Looper.loop(Looper.java:194)
            at android.app.ActivityThread.main(ActivityThread.java:5691)
            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:959)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
     Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class android.support.v7.widget.Toolbar
            at android.view.LayoutInflater.createView(LayoutInflater.java:633)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)
            at android.view.LayoutInflater.parseInclude(LayoutInflater.java:892)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:802)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
            at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:249)
            at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106)
            at com.fitness.dullmonkey.keepingfit.MainActivity.onCreate(MainActivity.java:40)
            at android.app.Activity.performCreate(Activity.java:6142)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1115)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2528)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2656)
            at android.app.ActivityThread.access$800(ActivityThread.java:178)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1512)
            at android.os.Handler.dispatchMessage(Handler.java:111)
            at android.os.Looper.loop(Looper.java:194)
            at android.app.ActivityThread.main(ActivityThread.java:5691)
            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:959)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
     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:607)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)
            at android.view.LayoutInflater.parseInclude(LayoutInflater.java:892)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:802)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
            at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:249)
            at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106)
            at com.fitness.dullmonkey.keepingfit.MainActivity.onCreate(MainActivity.java:40)
            at android.app.Activity.performCreate(Activity.java:6142)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1115)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2528)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2656)
            at android.app.ActivityThread.access$800(ActivityThread.java:178)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1512)
            at android.os.Handler.dispatchMessage(Handler.java:111)
            at android.os.Looper.loop(Looper.java:194)
            at android.app.ActivityThread.main(ActivityThread.java:5691)
            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:959)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)
     Caused by: java.lang.RuntimeException: Failed to resolve attribute at index 216
            at android.content.res.TypedArray.getDimensionPixelSize(TypedArray.java:569)
            at android.view.View.<init>(View.java:4084)
            at android.view.ViewGroup.<init>(ViewGroup.java:524)
            at android.view.ViewGroup.<init>(ViewGroup.java:520)
            at android.support.v7.widget.Toolbar.<init>(Toolbar.java:195)
            at android.support.v7.widget.Toolbar.<init>(Toolbar.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:607)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)
            at android.view.LayoutInflater.parseInclude(LayoutInflater.java:892)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:802)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
            at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:249)
            at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:106)
            at com.fitness.dullmonkey.keepingfit.MainActivity.onCreate(MainActivity.java:40)
            at android.app.Activity.performCreate(Activity.java:6142)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1115)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2528)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2656)
            at android.app.ActivityThread.access$800(ActivityThread.java:178)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1512)
            at android.os.Handler.dispatchMessage(Handler.java:111)
            at android.os.Looper.loop(Looper.java:194)
            at android.app.ActivityThread.main(ActivityThread.java:5691)
            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:959)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754)

提前感谢您的帮助。

【问题讨论】:

  • 检查清单文件
  • 发布 logcat。appcompat 也需要 appcompat 主题
  • Logcat 发布@GabrieleMariotti。
  • 已编辑:如果在您的 styles.xml (v22) 下修改父主题以使用
  • 非常感谢@headuck,现在效果很好!

标签: android android-5.0-lollipop android-support-library android-styles


【解决方案1】:

错误的原因是,在工具栏xml中,?attr前缀指的是支持库主题中的属性。另一方面,在上述style.xml 的v22 下,使用系统主题android:Theme.Material.Light.NoActionBar 而不是支持库主题。因此,inflater 无法解析支持库的属性,例如 ?attr/actionBarSize

在 style.xml(无论版本如何)中使用支持库主题 Theme.AppCompat.Light.NoActionBar 可以解决该问题。

【讨论】:

    【解决方案2】:

    在我的情况下,同样的错误,但在 android axml 文件中没有 ?attr 的症状

    这看起来像是 Xamarin.Appcombat 的兼容性问题(我在网上某处找到)

    尝试将相同的项目部署到较低的 Android API 中

    在我的情况下,Android 模拟器 API 21 出现上述错误,但另一个使用 Android API 18 的模拟器完全没有问题

    【讨论】:

      猜你喜欢
      • 2014-12-21
      • 1970-01-01
      • 2017-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多