Android4.x系统手机点击菜单键报错:Error inflating class android.support.v7.internal.view.menu.ExpandedMenuView

本文介绍了一种在Android 4.x设备上点击菜单键导致应用崩溃的问题及其解决方案。该问题源于Activity样式未正确继承Theme.AppCompat.Light.DarkActionBar。通过调整样式设置解决了崩溃问题。

记录一下此错误(错误信息在文后,可先看错误信息是否一样,然后看解决方法):

在4.x的设备上点击菜单键,程序崩溃,本来以为是缺少v7的资源包,但对比原来项目发现并缺未少引用,后来各种对比,发现错误的根源是Application的Activity的样式没有继承 Theme.AppCompat.Light.DarkActionBar 导致。



错误信息:

android.view.InflateException: Binary XML file line #17: Error inflating class android.support.v7.internal.view.menu.ExpandedMenuView
	at android.view.LayoutInflater.createView(LayoutInflater.java:620)
	at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
	at android.view.LayoutInflater.inflate(LayoutInflater.java:469)
	at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
	at android.support.v7.internal.view.menu.ListMenuPresenter.getMenuView(ListMenuPresenter.java:102)
	at android.support.v7.app.AppCompatDelegateImplV7$PanelFeatureState.getListMenuView(AppCompatDelegateImplV7.java:1719)
	at android.support.v7.app.AppCompatDelegateImplV7.initializePanelContent(AppCompatDelegateImplV7.java:1055)
	at android.support.v7.app.AppCompatDelegateImplV7.openPanel(AppCompatDelegateImplV7.java:897)
	at android.support.v7.app.AppCompatDelegateImplV7.onKeyUpPanel(AppCompatDelegateImplV7.java:1267)
	at android.support.v7.app.AppCompatDelegateImplV7.onKeyUp(AppCompatDelegateImplV7.java:751)
	at android.support.v7.app.AppCompatDelegateImplV7.dispatchKeyEvent(AppCompatDelegateImplV7.java:745)
	at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.dispatchKeyEvent(AppCompatDelegateImplBase.java:263)
	at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1963)
	at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:3847)
	at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3821)
	at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3392)
	at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3442)
	at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3411)
	at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3518)
	at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3419)
	at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3575)
	at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3392)
	at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3442)
	at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3411)
	at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3419)
	at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3392)
	at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3442)
	at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3411)
	at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3551)
	at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:3713)
	at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2016)
	at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1710)
	at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1701)
	at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:1993)
	at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141)
	at android.os.MessageQueue.nativePollOnce(Native Method)
	at android.os.MessageQueue.next(MessageQueue.java:138)
	at android.os.Looper.loop(Looper.java:123)
	at android.app.ActivityThread.main(ActivityThread.java:5119)
	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:789)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
	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)
	... 43 more
Caused by: android.content.res.Resources$NotFoundException: Resource is not a Drawable (color or path): TypedValue{t=0x2/d=0x7f010111 a=3}
	at android.content.res.Resources.loadDrawable(Resources.java:2108)
	at com.huawei.android.content.res.ResourcesEx.loadDrawable(ResourcesEx.java:639)
	at android.content.res.TypedArray.getDrawable(TypedArray.java:629)
	at android.widget.AbsListView.<init>(AbsListView.java:796)
	at android.widget.ListView.<init>(ListView.java:148)
	at android.widget.ListView.<init>(ListView.java:144)
	at android.support.v7.internal.view.menu.ExpandedMenuView.<init>(ExpandedMenuView.java:54)
	at android.support.v7.internal.view.menu.ExpandedMenuView.<init>(ExpandedMenuView.java:50)
	... 46 more
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.inflate(LayoutInflater.java:469)
	at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
	at android.support.v7.internal.view.menu.ListMenuPresenter.getMenuView(ListMenuPresenter.java:102)
	at android.support.v7.app.AppCompatDelegateImplV7$PanelFeatureState.getListMenuView(AppCompatDelegateImplV7.java:1719)
	at android.support.v7.app.AppCompatDelegateImplV7.initializePanelContent(AppCompatDelegateImplV7.java:1055)
	at android.support.v7.app.AppCompatDelegateImplV7.openPanel(AppCompatDelegateImplV7.java:897)
	at android.support.v7.app.AppCompatDelegateImplV7.onKeyUpPanel(AppCompatDelegateImplV7.java:1267)
	at android.support.v7.app.AppCompatDelegateImplV7.onKeyUp(AppCompatDelegateImplV7.java:751)
	at android.support.v7.app.AppCompatDelegateImplV7.dispatchKeyEvent(AppCompatDelegateImplV7.java:745)
	at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.dispatchKeyEvent(AppCompatDelegateImplBase.java:263)
	at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1963)
	at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:3847)
	at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3821)
	at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3392)
	at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3442)
	at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3411)
	at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3518)
	at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3419)
	at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3575)
	at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3392)
	at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3442)
	at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3411)
	at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3419)
	at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3392)
	at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3442)
	at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3411)
	at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3551)
	at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:3713)
	at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2016)
	at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1710)
	at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1701)
	at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:1993)
	at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141)
	at android.os.MessageQueue.nativePollOnce(Native Method)
	at android.os.MessageQueue.next(MessageQueue.java:138)
	at android.os.Looper.loop(Looper.java:123)
	at android.app.ActivityThread.main(ActivityThread.java:5119)
	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:789)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
	at dalvik.system.NativeStart.main(Native Method)
Caused by: android.content.res.Resources$NotFoundException: Resource is not a Drawable (color or path): TypedValue{t=0x2/d=0x7f010111 a=3}
	at android.content.res.Resources.loadDrawable(Resources.java:2108)
	at com.huawei.android.content.res.ResourcesEx.loadDrawable(ResourcesEx.java:639)
	at android.content.res.TypedArray.getDrawable(TypedArray.java:629)
	at android.widget.AbsListView.<init>(AbsListView.java:796)
	at android.widget.ListView.<init>(ListView.java:148)
	at android.widget.ListView.<init>(ListView.java:144)
	at android.support.v7.internal.view.menu.ExpandedMenuView.<init>(ExpandedMenuView.java:54)
	at android.support.v7.internal.view.menu.ExpandedMenuView.<init>(ExpandedMenuView.java:50)
	... 46 more
android.content.res.Resources$NotFoundException: Resource is not a Drawable (color or path): TypedValue{t=0x2/d=0x7f010111 a=3}
	at android.content.res.Resources.loadDrawable(Resources.java:2108)
	at com.huawei.android.content.res.ResourcesEx.loadDrawable(ResourcesEx.java:639)
	at android.content.res.TypedArray.getDrawable(TypedArray.java:629)
	at android.widget.AbsListView.<init>(AbsListView.java:796)
	at android.widget.ListView.<init>(ListView.java:148)
	at android.widget.ListView.<init>(ListView.java:144)
	at android.support.v7.internal.view.menu.ExpandedMenuView.<init>(ExpandedMenuView.java:54)
	at android.support.v7.internal.view.menu.ExpandedMenuView.<init>(ExpandedMenuView.java:50)
	at java.lang.reflect.Constructor.constructNative(Native Method)
	at java.lang.reflect.Constructor.newInstan



Android 开发中,遇到 `Error inflating class androidx.fragment.app.FragmentContainerView` 错误通常与布局文件、Fragment 的使用方式或依赖配置有关。以下是可能的原因及对应的解决方案: ### 1. FragmentContainerView 的使用方式是否正确 确保在 XML 布局文件中正确使用了 `FragmentContainerView`,其基本结构如下: ```xml <androidx.fragment.app.FragmentContainerView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/fragment_container" android:layout_width="match_parent" android:layout_height="match_parent" android:name="com.example.yourapp.YourFragment" /> ``` - `android:name` 属性用于指定要加载的 Fragment 类名。 - 如果使用 `FragmentContainerView` 动态加载 Fragment,则不需要设置 `android:name`,而是通过 `FragmentTransaction` 来操作。 如果在使用 `FragmentTransaction` 时仍然在 XML 中声明了 `android:name` 属性,可能会导致冲突,从而引发膨胀错误。 ### 2. 确保 Fragment 类存在并正确实现 检查 `android:name` 指定的 Fragment 是否存在于项目中,并且继承自 `Fragment` 或 `androidx.fragment.app.Fragment`。此外,确保该 Fragment 类没有语法错误或运行时异常。 ### 3. 检查依赖是否完整 确保 `build.gradle` 文件中包含必要的依赖项: ```gradle implementation 'androidx.fragment:fragment:1.6.1' implementation 'androidx.core:core-ktx:1.10.1' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'com.google.android.material:material:1.9.0' ``` 版本号可根据项目需求进行调整。如果依赖缺失或版本不兼容,可能导致 `FragmentContainerView` 无法正确初始化。 ### 4. 主题与样式配置 如果项目使用了特定的主题(如 `Theme.AppCompat.Light.NoActionBar`),请确保 `Activity` 的主题继承自 AppCompat 主题,否则可能导致 Fragment 相关组件无法正常加载[^4]。 可以在 `AndroidManifest.xml` 中确认: ```xml <activity android:name=".MainActivity" android:theme="@style/Theme.AppCompat.Light.NoActionBar" /> ``` ### 5. 清理项目并重建 有时构建缓存可能导致问题,尝试执行以下操作: - 清理项目:`Build > Clean Project` - 重建项目:`Build > Rebuild Project` - 清除设备上的应用数据或重新安装 ### 6. 检查 XML 布局文件的语法 确保 `FragmentContainerView` 所在的 XML 文件中没有语法错误或属性拼写错误。例如,遗漏 `xmlns:android` 命名空间或错误的属性值都可能引发膨胀异常。 ### 7. 使用 FragmentTransaction 替代静态声明 如果动态加载 Fragment 是需求的一部分,建议使用 `FragmentTransaction` 来添加或替换 Fragment: ```java getSupportFragmentManager().beginTransaction() .replace(R.id.fragment_container, new YourFragment()) .commit(); ``` 确保容器 `R.id.fragment_container` 是一个 `FrameLayout` 或 `FragmentContainerView`,并且没有在 XML 中预先声明 `android:name`。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值