【问题标题】:java.lang.NumberFormatException: Invalid int: "res/drawable-hdpi-v4/ic_action_share.png"java.lang.NumberFormatException:无效的 int:“res/drawable-hdpi-v4/ic_action_share.png”
【发布时间】:2014-12-09 06:03:43
【问题描述】:

操作栏上有一个带有自定义图像的 ShareActionProvider 按钮。此外修改了 ShareActionProvider 代码(How to hide the share action (which use most) icon near the share action provider?https://gist.github.com/saulpower/10557956)。在多部手机(Samsung Galaxy S3 - Android 4.1、Huawei G730-U10 - Android 4.2)上发生崩溃。

文件 ic_action_share.png 存在于文件夹 drawable-xxhdpi、drawable-xhdpi、drawable-hdpi、drawable-mdpi 中。为什么 Android 从 v4 文件夹请求此图像(java.lang.NumberFormatException: Invalid int: "res/drawable-xhdpi-v4/ic_action_share.png")?

堆栈:

android.view.InflateException: Binary XML file line #8: Error inflating class android.widget.ImageButton
at android.view.LayoutInflater.createView(LayoutInflater.java:613)
at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
at android.view.LayoutInflater.onCreateView(LayoutInflater.java:660)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685)
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 com.android.internal.app.ActionBarImpl.setCustomView(ActionBarImpl.java:330)
...
Caused by: java.lang.NumberFormatException: Invalid int: "res/drawable-hdpi-v4/ic_action_share.png"
at java.lang.Integer.invalidInt(Integer.java:138)
at java.lang.Integer.parse(Integer.java:375)
at java.lang.Integer.parseInt(Integer.java:366)
at com.android.internal.util.XmlUtils.convertValueToInt(XmlUtils.java:123)
at android.content.res.TypedArray.getInt(TypedArray.java:260)
at android.widget.ImageView.<init>(ImageView.java:151)
at android.widget.ImageButton.<init>(ImageButton.java:87)
at android.widget.ImageButton.<init>(ImageButton.java:83)
java.lang.NumberFormatException: Invalid int: "res/drawable-xhdpi-v4/ic_action_share.png"
at java.lang.Integer.invalidInt(Integer.java:138)
at java.lang.Integer.parse(Integer.java:375)
at java.lang.Integer.parseInt(Integer.java:366)
at com.android.internal.util.XmlUtils.convertValueToInt(XmlUtils.java:123)
at android.content.res.TypedArray.getInt(TypedArray.java:254)
at android.view.View.<init>(View.java:3561)
at android.view.ViewGroup.<init>(ViewGroup.java:432)
at com.example.trace.CustomShareActionProvider.ActivityChooserView.<init>(Unknown Source)
at com.example.trace.CustomShareActionProvider.ActivityChooserView.<init>(Unknown Source)
at com.example.trace.CustomShareActionProvider.ActivityChooserView.<init>(Unknown Source)
at com.example.trace.CustomShareActionProvider.ShareActionProvider.onCreateActionView(Unknown Source)
at android.support.v4.view.j.onCreateActionView(Unknown Source)
at android.support.v7.internal.view.menu.y.onCreateActionView(Unknown Source)
at com.android.internal.view.menu.MenuItemImpl.getActionView(MenuItemImpl.java:580)
at android.support.v7.internal.view.menu.t.getActionView(Unknown Source)
at android.support.v4.view.y.a(Unknown Source)
at com.example.trace.p.a(Unknown Source)
at android.support.v4.app.Fragment.b(Unknown Source)
at android.support.v4.app.n.a(Unknown Source)
at android.support.v4.app.h.onCreatePanelMenu(Unknown Source)
at android.support.v7.a.g.a(Unknown Source)
at android.support.v7.a.m.a(Unknown Source)
at android.support.v7.a.g.onCreatePanelMenu(Unknown Source)
at android.support.v7.a.n.onCreatePanelMenu(Unknown Source)
at com.android.internal.policy.impl.PhoneWindow.preparePanel(PhoneWindow.java:445)
at com.android.internal.policy.impl.PhoneWindow.invalidatePanelMenu(PhoneWindow.java:819)
at android.app.Activity.invalidateOptionsMenu(Activity.java:2690)
...

style.xml

<style name="app_theme" parent="@style/Theme.AppCompat.Light">
    <!-- Support library compatibility -->
    <item name="actionBarWidgetTheme">@style/CustomShareIcon</item>
    ...
    <item name="android:actionBarWidgetTheme" tools:targetApi="14">@style/CustomShareIcon</item>
</style>

<style name="CustomShareIcon" parent="@style/Theme.AppCompat">
    <item name="actionModeShareDrawable">@drawable/ic_action_share</item>
    <item name="*android:actionModeShareDrawable">@drawable/ic_action_share</item>
</style>

【问题讨论】:

  • xhdp 文件夹中有没有 ic_action_share.png
  • 是的,我在 drawable-xxhdpi、drawable-xhdpi、drawable-hdpi、drawable-mdpi 文件夹中有 ic_action_share.png。但是为什么 API 版本 16 的 Android 请求 API 4+ 的图像,而所有 API 都有文件?

标签: android numberformatexception android-imagebutton


【解决方案1】:

试试这个

在您的res/drawable-hdpi-v4/ 文件夹中添加图片ic_action_share.png

v-4 是第 4 版,因此它只能自动访问 v-4 文件夹。

【讨论】:

  • 但这就是问题所在,当我们有 drawable-xxhdpi/xhdpi/hdpi 时,为什么还要放 v4 文件夹?为什么android要研究v4?
  • @Farhan 你得出这个结论了吗?
  • 我在明确删除图像资源时遇到了这个问题。清洁项目解决了我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多