InflateException:二进制 XML 文件行 #8:膨胀 class ImageView 时出错
InflateException: Binary XML file line #8: Error inflating class ImageView
我知道在 SO 上还有其他问题问同样的问题。我已经看过其中的大部分。
大多数答案都是关于内存错误的。我看不出只加载一个小图标(24x24 像素)的 ImageView
怎么能做出这样的东西。
但我想post这里的堆栈跟踪也许其他人可以识别我不能识别的东西并帮助我。
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:我的适配器代码 class。
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;
}
}
堆栈跟踪没有显示它,但 inflation 期间的错误可能来自 ImageView
中使用的 drawable,在这种情况下:
android:src="@drawable/ic_dot"
OP 通过尝试不同的可绘制对象“现在看起来没问题...”来测试这种直觉。
如果您使用矢量绘图,请使用
app:srcCompat="@drawable/ic_dot"
而不是
android:src="@drawable/ic_dot"
binary xml 文件第 0 行:错误膨胀 class imageview
你要看看你的图片是否变成了drawable-v23或者v24可能比你的手机os级别高,一定要避免在项目中创建drawable版本的图片
示例在可绘制文件夹中 ~> "ic_contact(v24)"
以下代码可能会添加到Android Manifests-Activity
<activity
android:name=""
--------------
android:theme="@android:style/Theme.Black.NoTitleBar">
</activity>
如果您添加了这个主题,请删除。
删除这个主题后我的问题就解决了。很长时间后我得到了这些解决方案。
我遇到了同样的问题。我的 imageView 的 png 图像导致 class inflateException。这只发生在我的 phone 运行 android 6.0.1 中,但在我的 phone 运行 android 7.0 中没有。解决这个问题:
---在Android工作室---
- 从 drawable 文件夹中删除了 png 图像(我只有 drawable 文件夹可见,而不是 drawable-v24)。
- 将 png 复制回可绘制文件夹。执行此操作时,您可以选择将其复制到 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
在我的例子中,我在 ImageView
中有 app:srcCompat="@drawable/ic_svg_image"
,但它是非常复杂的 SVG。尽管它显示在 Design
选项卡中,但应用程序崩溃了。
我把它改成PNG了。
不要将图像粘贴到 Android studio 中的 drawable 中,将其粘贴到 drawable 文件夹中并清理项目,然后 运行 它就可以工作了。
在没有 android:background
的情况下使用 android.support.v7.widget.AppCompatImageView
解决了我的问题。
我也面临这样的问题。最简单的解决方法
只要把你的drawable文件放在drawable目录下,不要drawable 24.
android:src="@raw/ic_image"
我将图像文件添加到名为 raw 的新目录,它解决了我的问题。
对我有帮助的只是复制图像文件(在我的例子中是 .png)
来自 res\drawable-v24
到\res\drawable
目录.
如果这 post 能为其他人节省时间,我们会很高兴。
我也经常遇到这个错误。出现此错误的原因是,
1) 在ImageView
中我们使用了错误的图像格式,或者我们在设计和保存时没有正确保存的图像。它的扩展以某种方式损坏了。
2) 这个错误的另一个原因是我们使用了一个 xml with drawable。比如这里的android:src="@drawable/ic_left"
ic_left
是我们正在使用的 drawable 中的 xml 文件。
因此,为避免此类错误,请始终将 .png 格式的图像与 ImageView 一起使用。
在我的例子中,错误是,
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
我今天遇到了同样的问题,
找到了解决方案!
现在,无论何时添加图像文件,请确保通过此将其转换为 xxhdpi
,您的应用程序将在每台设备上 运行!
这个问题通常是当您将 drawables 文件复制到 drawable-24 文件夹而不是 drawable 文件夹时引起的。
因此,将所有图像从 drawable-24 文件夹复制到 drawable。
从 drawable (24) v 文件夹中删除 png 图像并将图像放在可见的 drawable 文件夹中,而不是 drawable-v24。
在我的例子中,由于混淆器,它只在发布版本中崩溃,所以在我添加了这一行之后:
-keep class android.support.v7.widget.** { *; }
在文件 proguard-rules.pro 中,崩溃问题已解决。
当您看到 imageview 出现“错误膨胀”时,请尝试将 ImageView 的 src 文件从 drawable(24) 更改为简单的 drawable 文件夹,如果有其他文件,也同样如此。这是因为您的 API 版本比您要安装应用程序的 android 版本大。
对我来说,所有可绘制对象都粘贴在 \res\drawable 文件夹中,而不是 drawable-v24 文件夹中。尽管如此,我还是遇到了崩溃。
我解决这个问题的方法是使用 androidx.appcompat.widget.AppCompatImageView
而不是常规的 ImageView
。
接下来,我将 android:src
更改为 app:srcCompat
。
应用程序停止崩溃。
我知道在 SO 上还有其他问题问同样的问题。我已经看过其中的大部分。
大多数答案都是关于内存错误的。我看不出只加载一个小图标(24x24 像素)的 ImageView
怎么能做出这样的东西。
但我想post这里的堆栈跟踪也许其他人可以识别我不能识别的东西并帮助我。
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:我的适配器代码 class。
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;
}
}
堆栈跟踪没有显示它,但 inflation 期间的错误可能来自 ImageView
中使用的 drawable,在这种情况下:
android:src="@drawable/ic_dot"
OP 通过尝试不同的可绘制对象“现在看起来没问题...”来测试这种直觉。
如果您使用矢量绘图,请使用
app:srcCompat="@drawable/ic_dot"
而不是
android:src="@drawable/ic_dot"
binary xml 文件第 0 行:错误膨胀 class imageview
你要看看你的图片是否变成了drawable-v23或者v24可能比你的手机os级别高,一定要避免在项目中创建drawable版本的图片
示例在可绘制文件夹中 ~> "ic_contact(v24)"
以下代码可能会添加到Android Manifests-Activity
<activity
android:name=""
--------------
android:theme="@android:style/Theme.Black.NoTitleBar">
</activity>
如果您添加了这个主题,请删除。
删除这个主题后我的问题就解决了。很长时间后我得到了这些解决方案。
我遇到了同样的问题。我的 imageView 的 png 图像导致 class inflateException。这只发生在我的 phone 运行 android 6.0.1 中,但在我的 phone 运行 android 7.0 中没有。解决这个问题:
---在Android工作室---
- 从 drawable 文件夹中删除了 png 图像(我只有 drawable 文件夹可见,而不是 drawable-v24)。
- 将 png 复制回可绘制文件夹。执行此操作时,您可以选择将其复制到 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
在我的例子中,我在 ImageView
中有 app:srcCompat="@drawable/ic_svg_image"
,但它是非常复杂的 SVG。尽管它显示在 Design
选项卡中,但应用程序崩溃了。
我把它改成PNG了。
不要将图像粘贴到 Android studio 中的 drawable 中,将其粘贴到 drawable 文件夹中并清理项目,然后 运行 它就可以工作了。
在没有 android:background
的情况下使用 android.support.v7.widget.AppCompatImageView
解决了我的问题。
我也面临这样的问题。最简单的解决方法
只要把你的drawable文件放在drawable目录下,不要drawable 24.
android:src="@raw/ic_image"
我将图像文件添加到名为 raw 的新目录,它解决了我的问题。
对我有帮助的只是复制图像文件(在我的例子中是 .png)
来自 res\drawable-v24
到\res\drawable 目录.
如果这 post 能为其他人节省时间,我们会很高兴。
我也经常遇到这个错误。出现此错误的原因是,
1) 在ImageView
中我们使用了错误的图像格式,或者我们在设计和保存时没有正确保存的图像。它的扩展以某种方式损坏了。
2) 这个错误的另一个原因是我们使用了一个 xml with drawable。比如这里的android:src="@drawable/ic_left"
ic_left
是我们正在使用的 drawable 中的 xml 文件。
因此,为避免此类错误,请始终将 .png 格式的图像与 ImageView 一起使用。 在我的例子中,错误是,
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
我今天遇到了同样的问题,
找到了解决方案!
现在,无论何时添加图像文件,请确保通过此将其转换为 xxhdpi
,您的应用程序将在每台设备上 运行!
这个问题通常是当您将 drawables 文件复制到 drawable-24 文件夹而不是 drawable 文件夹时引起的。 因此,将所有图像从 drawable-24 文件夹复制到 drawable。
从 drawable (24) v 文件夹中删除 png 图像并将图像放在可见的 drawable 文件夹中,而不是 drawable-v24。
在我的例子中,由于混淆器,它只在发布版本中崩溃,所以在我添加了这一行之后:
-keep class android.support.v7.widget.** { *; }
在文件 proguard-rules.pro 中,崩溃问题已解决。
当您看到 imageview 出现“错误膨胀”时,请尝试将 ImageView 的 src 文件从 drawable(24) 更改为简单的 drawable 文件夹,如果有其他文件,也同样如此。这是因为您的 API 版本比您要安装应用程序的 android 版本大。
对我来说,所有可绘制对象都粘贴在 \res\drawable 文件夹中,而不是 drawable-v24 文件夹中。尽管如此,我还是遇到了崩溃。
我解决这个问题的方法是使用 androidx.appcompat.widget.AppCompatImageView
而不是常规的 ImageView
。
接下来,我将 android:src
更改为 app:srcCompat
。
应用程序停止崩溃。