【问题标题】:InflateException: Binary XML file line #8: Error inflating class ImageViewInflateException: Binary XML file line #8: Error inflating class ImageView
【发布时间】:2016-10-03 23:11:11
【问题描述】:

我知道在 SO 上还有其他问题问同样的问题。我已经看过其中的大部分。

大多数答案都与内存错误有关。我看不出只加载一个小图标(24x24 像素)的ImageView 是如何做出这样的事情的。

但我想在这里发布堆栈跟踪,也许其他人可以识别我无法识别的东西并帮助我。

06-03 22:14:17.367 28590-28590/css.mvp.example.debug W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x41e4ad40)
06-03 22:14:17.409 28590-28590/css.mvp.example.debug E/AndroidRuntime: FATAL EXCEPTION: main
Process: css.mvp.example.debug, PID: 28590  android.view.InflateException: Binary XML file line #8: Error inflating class ImageView
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:713)
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
    at css.mvp.example.main.projects.fragments.adapters.PollAnswersAdapter.getView(PollAnswersAdapter.java:38)
    at android.widget.AbsListView.obtainView(AbsListView.java:2255)
    at android.widget.ListView.measureHeightOfChildren(ListView.java:1263)
    at android.widget.ListView.onMeasure(ListView.java:1175)
    at android.view.View.measure(View.java:16540)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5137)
    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
    at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
    at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
    at android.view.View.measure(View.java:16540)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5137)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
    at android.view.View.measure(View.java:16540)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5137)
    at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:668)
    at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:735)
    at android.view.View.measure(View.java:16540)
    at android.support.v4.widget.DrawerLayout.onMeasure(DrawerLayout.java:1075)
    at android.view.View.measure(View.java:16540)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5137)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
    at android.view.View.measure(View.java:16540)
    at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:719)
    at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:455)
    at android.view.View.measure(View.java:16540)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5137)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
    at android.view.View.measure(View.java:16540)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5137)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
    at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135)
    at android.view.View.measure(View.java:16540)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5137)
    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
    at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
    at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
    at android.view.View.measure(View.java:16540)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5137)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
    at android.view.View.measure(View.java:16540)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5137)
    at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
    at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
    at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
    at android.view.View.measure(View.java:16540)
    at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5137)
    at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
    at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2291)
    at android.view.View.measure(View.java:16540)
    at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1942)
    at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1132)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1321)
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1019)
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5725)

布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout   xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal"
android:weightSum="11"
android:paddingTop="16dp" android:paddingBottom="16dp"
android:gravity="center_horizontal"
android:layout_width="match_parent" android:layout_height="wrap_content">

<ImageView
    android:id="@+id/iv_answer_circle"
    android:src="@drawable/ic_dot"
    android:layout_gravity="center" android:layout_weight="2"
    android:layout_marginLeft="16dp" android:layout_marginRight="16dp"
    android:layout_width="0dp" android:layout_height="wrap_content" />

<TextView android:id="@+id/tv_poll_answer"
    android:layout_weight="6"
    android:layout_width="0dp" android:layout_height="wrap_content" />

<TextView android:id="@+id/tv_poll_answer_num"
    android:layout_weight="1"
    android:layout_marginLeft="16dp" android:layout_marginRight="8dp"
    android:layout_width="0dp" android:layout_height="wrap_content" />

<TextView android:id="@+id/tv_poll_answer_percent"
    android:layout_weight="2"
    android:layout_marginRight="16dp"
    android:layout_width="0dp" android:layout_height="wrap_content" />

</LinearLayout>

编辑 2:我的适配器类的代码。

public class PollAnswersAdapter extends ArrayAdapter<PollAnswerItem> {

    private Context context;
    private ArrayList<PollAnswerItem> data;


    public PollAnswersAdapter(Context context, ArrayList<PollAnswerItem> data) {
        super(context, -1, data);
        this.context = context;
        this.data = data;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View rowView = inflater.inflate(R.layout.row_answer, parent, false);

        ImageView ivCircle = (ImageView) rowView.findViewById(R.id.iv_answer_circle);
        TextView tvAnswer = (TextView) rowView.findViewById(R.id.tv_poll_answer);
        TextView tvNums = (TextView) rowView.findViewById(R.id.tv_poll_answer_num);
        TextView tvPercent = (TextView) rowView.findViewById(R.id.tv_poll_answer_percent);

        tvAnswer.setText(data.get(position).getAnswer());
        tvNums.setText(data.get(position).getNum());
        tvPercent.setText(data.get(position).getPercent() + "%");
        tvPercent.setTextColor(ColorTemplate.PREDEFINED_COLORS[position]);

        return rowView;
    }

}

【问题讨论】:

  • 您的堆栈跟踪还有更多内容,特别是一个或多个 Caused by 节。请编辑您的问题并发布整个堆栈跟踪。
  • 就是这样。也许 logcat 没有全部显示是因为它太大了?
  • 同时显示您的 XML 文件
  • @CommonsWare 我尝试在命令行中使用logcat。我得到完全相同的信息。下一行是W/ActivityManager( 1049): Force finishing activity css.mvp.example.debug/css.mvp.example.main.projects.ProjectsActivity
  • 我预感问题可能出在您在android:src 中设置的drawable 上。你能把它从你的ImageView 中删除,看看你是否仍然遇到崩溃?

标签: android android-layout inflate-exception


【解决方案1】:

二进制 xml 文件第 0 行:膨胀类 imageview 时出错

你必须看看你的图片是否变成了drawable-v23或v24,这可能高于你的移动操作系统级别,确保避免在项目中创建可绘制版本的图片

示例在drawable文件夹中~> "ic_contact(v24)"

【讨论】:

  • 谢谢,我对 Android 开发(2020 年)还很陌生,甚至不知道 v24,我将具有“v24”的资源复制粘贴到 /drawable 文件夹中,并且解决了问题!
【解决方案2】:

堆栈跟踪没有显示它,但膨胀期间的错误可能来自ImageView中使用的drawable,在这种情况下:

android:src="@drawable/ic_dot"

OP 通过尝试“现在看起来还可以......”的不同可绘制对象来测试这种预感。

【讨论】:

  • 知道为什么 .jpg 文件会导致此错误吗?
  • 我对两个 svg 有同样的问题(由 android studio 转换为 xml)。我怀疑这可能是因为它们的宽度和高度太大(即使我尝试更改文件中的这些参数,也没有运气)
【解决方案3】:

如果您使用矢量绘图,请使用

app:srcCompat="@drawable/ic_dot"

而不是

android:src="@drawable/ic_dot"

【讨论】:

  • 感谢您的回答...在我将应用程序迁移到 Android X 后...我得到错误膨胀类 Resources$NotFoundException 在我添加新的 ImageView 和新的矢量可绘制...之后Imageview 不会导致此崩溃...添加 Android x 后的 Imageview 会导致此错误...我会在应用您的答案后看到结果
【解决方案4】:

对我有帮助的只是复制图像文件(在我的情况下为 .png)

  • 来自 res\drawable-v24

  • 到\res\drawable 目录。

如果这篇文章能为其他人节省时间,我会很高兴。

【讨论】:

  • 这对我有用 - 在 sdk 23 (android 6) 中尝试应用程序进行向后兼容时。
【解决方案5】:

我遇到了同样的问题。我的 imageView 的 png 图像导致类 inflateException。这只发生在我运行 android 6.0.1 的手机上,而不是我运行 android 7.0 的手机上。要解决这个问题:

---在Android Studio中---

  • 从 drawable 文件夹中删除了 png 图像(我只有 drawable 文件夹可见,而不是 drawable-v24)。
  • 将 png 复制回 drawable 文件夹。执行此操作时,您可以选择将其复制到 drawable 或 drawable-v24 文件夹。 Copy the png to both folders
  • 将 png 复制到两个文件夹(png 的名称必须相同)。
  • 将 png 复制到两个文件夹后,将显示一个带有 png 名称的新文件夹。在里面你会看到2个png。旁边有“(v24)”的一个。 New folder with name of png's will appear, containing png's

【讨论】:

  • PNG 只需要在一个文件夹中,不需要同时在两个文件夹中。
【解决方案6】:

我也面临这样的问题。最简单的解决方法

只是把你的drawable文件放在drawable目录下,不是drawable 24.

【讨论】:

    【解决方案7】:

    此问题通常是在您将 drawables 文件复制到 drawable-24 文件夹而不是 drawable 文件夹时引起的。 因此,将所有图像从 drawable-24 文件夹复制到 drawable。

    【讨论】:

      【解决方案8】:

      使用android.support.v7.widget.AppCompatImageView 而不使用android:background 为我解决了这个问题。

      【讨论】:

        【解决方案9】:

        我今天也遇到了同样的问题, 找到了解决方案! 现在,每当您添加图像文件时,请确保将其转换为xxhdpi,您的应用程序将在每台设备上运行!

        【讨论】:

          【解决方案10】:

          Android Manifests-Activity 中可能会添加以下代码

          <activity
          android:name=""
          --------------
          android:theme="@android:style/Theme.Black.NoTitleBar">
          </activity>
          

          如果您已添加,请删除此主题。

          删除此主题后,我的问题已得到解决。经过很长时间我得到了这些解决方案。

          【讨论】:

            【解决方案11】:

            就我而言,app:srcCompat="@drawable/ic_svg_image"ImageView 中,但它是非常复杂的 SVG。虽然它显示在Design 选项卡中,但应用程序崩溃了。

            我把它改成了 PNG。

            【讨论】:

              【解决方案12】:

              不要将你的图片粘贴到Android Studio中的drawable中,将其粘贴到drawable文件夹中并清理项目然后运行它就可以了。

              【讨论】:

                【解决方案13】:
                android:src="@raw/ic_image"
                

                我将图像文件添加到名为 raw 的新目录中,它解决了我的问题。

                【讨论】:

                  【解决方案14】:

                  我也经常面对这个错误。出现此错误的原因是,

                  1) 在ImageView 中我们使用了错误的图像格式,或者我们设计和保存的图像没有正确保存。它的扩展以某种方式被破坏了。
                  2)这个错误的另一个原因是我们使用了一个带有drawable的xml。例如android:src="@drawable/ic_left",这里 ic_left 是我们正在使用的 drawable 中的 xml 文件。

                  因此,为避免此类错误,请始终在 ImageView 中使用 .png 格式的图像。 就我而言,错误是,

                  java.lang.RuntimeException: Unable to start activity ComponentInfo{package name of project/ActivtyName}: android.view.InflateException: Binary XML file line #255: Binary XML file line #255: Error inflating class ImageView

                  【讨论】:

                    【解决方案15】:

                    从 drawable (24) v 文件夹中删除 png 图像,并将图像放在 drawable 文件夹中可见,而不是 drawable-v24)。

                    【讨论】:

                      【解决方案16】:

                      在我的情况下,由于 proguard,它只在发布版本中崩溃,所以在我添加了这一行之后:

                      -keep class android.support.v7.widget.** { *; }
                      

                      在 proguard-rules.pro 文件中,崩溃已解决。

                      【讨论】:

                        【解决方案17】:

                        当您看到 imageview 出现“错误膨胀”时,尝试将 ImageView 的 src 文件从 drawable(24) 更改为简单的可绘制文件夹,如果有的话,也可以更改其他文件。这是因为您的 API 版本比您安装应用程序的 android 版本大。

                        【讨论】:

                          猜你喜欢
                          • 2013-04-25
                          • 2014-10-31
                          • 2013-03-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          相关资源
                          最近更新 更多