膨胀类 com.android.internal.widget.ActionBarContainer 时出错

Posted

技术标签:

【中文标题】膨胀类 com.android.internal.widget.ActionBarContainer 时出错【英文标题】:Error inflating class com.android.internal.widget.ActionBarContainer 【发布时间】:2016-02-28 16:09:38 【问题描述】:

所以,最近由于Error: File path too long on windows, keep below 240 characters,我不得不将我的项目从原来的位置移动。 在我运行我的项目时移动并解决其他错误后,应用程序因 android.view.InflateException: Binary XML file line #31: Error inflating class com.android.internal.widget.ActionBarContainer 而崩溃。不幸的是,我无法发布 logcat 消息,因为它太大而无法发布,所以我将在这里放一些 Caused by 消息。 除了 inflate 异常之外,其他两个异常是:Caused by: java.lang.reflect.InvocationTargetExceptionCaused by: java.lang.RuntimeException: Failed to resolve attribute at index 13强>。所有异常和错误本身都指向一个类的 setContentView(R.layout.activity_automatic_floor_plan_loader);。在这个布局文件中,我使用的是 AppTheme.AppBarOverlay。我很确定一切都与这个应用程序主题有关,但我不知道要改变什么以及如何改变。我经历了许多 *** 问题,但似乎没有一个能够回答或解决我遇到的错误。这是我的 Style.xml 文件:

这是我班级在 android-Manifest.xml 文件中的活动:

这是我的 activity.xml (activity_automatic_floor_plan_loader):

这是我的 build.gradle(app) 文件: 如何解决这个错误?非常感谢。

【问题讨论】:

(Activity+preferencefragment) Error inflating class com.android.internal.widget.ActionBarContainer的可能重复 ThemeOverlays 只提供一些属性。这就是为什么您在它们覆盖父活动主题的这些属性的小部件上使用它们。您的活动必须有一个常规主题 @style/AppTheme 此外,您可能想要的是<item name="actionBarTheme">@style/AppTheme.AppBarOverlay</item>actionBarPopupTheme 也是如此。 我一个月前发布了这个问题,我正在努力帮助其他人,因为我已经知道了解决方案。那么,在任何其他相关问题之前发布的这个问题为什么是重复的?而且我已经为自己的问题编辑了答案以帮助他人,并且不再包含指向其他问题的任何链接。 啊,我明白了。在这种情况下,要么标记答案,要么完全删除问题,这样提要就干净了。谢谢。 【参考方案1】:

这是我解决此错误的方法:

    在styles.xml 文件中,在第一个“AppTheme”样式中,我必须将Base 放在Theme.AppCompat 的前面。所以应该是“Base.Theme.AppCompat.Light.DarkActionBar”。

    然后我在 androidmanifest.xml 的父活动中使用了 android:theme="@style/AppTheme"。

    在子活动的 androidmanifest 文件中,我必须将 android:parentActivityName=".parentActivity" 并从子活动中删除 android:theme="@style/AppTheme.AppBarOverlay" 并将其放入activity.xml(子活动)文件如下。

    在 LinearLayout 标记的 activity.xml 文件中,我必须放置 android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"。它是“@style/AppTheme.AppBarOverlay”的父级。

这 4 步过程对我有用,如果您遇到此错误,只需按照以下步骤操作,它也应该对您有用。

编辑: 事实证明,解决方案非常简单。要在您的任何活动中使用操作栏,您只需要扩展 AppCompatActivity。只有我的主要活动是扩展 AppCompatActivity 而不是其他活动。上述获取操作栏的方法非常模糊,我知道它,但是,它最初是有效的,但现在我有了正确且直接的解决方案,如果您遇到此类错误,请检查您是否正在扩展 AppCompatActivity上课与否。

【讨论】:

【参考方案2】:

您将 ThemeOverlay 设置为 Activity 主题。 ThemeOverlay 仅指定某些属性,因此当在小部件上使用时,它覆盖这些属性在原始活动或父小部件主题上。您的 Activity 必须使用完整的主题,例如您的 AppTheme

这可能就是你要找的东西:

值/样式.xml

<style name="AppTheme" parent="AppBaseTheme">
    <item name="actionBarTheme">@style/AppTheme.AppBarOverlay</item>
    <item name="actionBarPopupTheme">@style/AppTheme.PopupOverlay</item>
</style>

AndroidManifest.xml

<activity
    android:theme="@style/AppTheme">
</activity>

【讨论】:

以上是关于膨胀类 com.android.internal.widget.ActionBarContainer 时出错的主要内容,如果未能解决你的问题,请参考以下文章

com.android.internal.R包怎么导入android里面的。

Android Studio - 'com.android.internal.application' Java 11 - 修复 Android Studio 中不可见的 gradle 项目

如何导入com.android.internal.telephony

求com.android.internal.R.attr.dialogTheme代码

com.android.internal.R.styleable在哪里找到?

android 活动已泄露窗口 com.android.internal.policy.impl.phonewindow$decorview 问题