在运行时膨胀类ImageButton时出错,但Android Studio没有显示任何错误,编译也完美无缺
应用程序崩溃,出现以下异常:在运行时膨胀类ImageButton时出错,但Android Studio没有显示任何错误,编译也完美无缺,android,android-layout,Android,Android Layout,应用程序崩溃,出现以下异常: android.view.InflateException: Binary XML file line #185: Binary XML file line #15: Error inflating class ImageButton 但是Android Studio没有显示布局错误,导致崩溃的文件的布局预览被正确呈现,应用程序可以编译并运行 崩溃ImageButton: <ImageButton android:id="@+id/kasablok_
android.view.InflateException: Binary XML file line #185: Binary XML file line #15: Error inflating class ImageButton
但是Android Studio没有显示布局错误,导致崩溃的文件的布局预览被正确呈现,应用程序可以编译并运行
崩溃ImageButton
:
<ImageButton
android:id="@+id/kasablok_pager_btn_left"
android:layout_width="74dp"
android:layout_height="match_parent"
android:background="#FFFFFF"
app:srcCompat="@drawable/ic_chevron_right_black_24dp"
android:rotation="180"
tools:ignore="ContentDescription" />
源可绘制文件已存在,并已通过单击访问该文件。预览窗口中没有显示可能问题的错误或警告。在我的
build.gradle
文件中也正确设置了vectorDrawables.useSupportLibrary=true
答案:ic_chevron_right_black_24dp.xml文件位于特定的res/drawable-v24
文件夹中,而不是普通的res/drawable
。通过这种方式,id
仅在API 24+上可用。将文件移动到后一个文件夹中确实解决了问题。我的手机运行AndroidM(API 23),这就是它崩溃的原因。找不到ic\u V形\u右侧\u黑色\u 24dp
id
在我不知道的情况下,文件怎么会出现在错误的目录中?我从另一个项目复制了
ic\u chevron\u right\u black\u 24dp.xml
文件。我所做的是将文件粘贴到drawable
资源目录中,同时以Android
查看项目(左上角的下拉列表,允许您选择如何在左侧导航面板中表示项目)。Android studio不知何故决定将文件放入特定的drawable-v24
文件夹,而不是常规的drawable
文件夹
为什么Android Studio没有显示任何错误,为什么预览正确膨胀?布局预览已正确膨胀,因为预览以及
compileSdkVersion
已设置为android-P
。通过这种方式,预览被呈现,就好像它在资源所在的android-P
API上一样
如何解决应用程序中的充气异常问题?
当您看到
充气异常时
,此异常本身不会提供有关您的问题的任何可用信息。它可以由各种不同的独立事物引起。你必须看得更深一点<代码>充气异常不是原因-它是由其他原因引起的结果
在我的例子中,整个堆栈跟踪如下所示:
android.view.InflateException: Binary XML file line #185: Binary XML file line #15: Error inflating class ImageButton
at android.view.LayoutInflater.inflate(LayoutInflater.java:539)
at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2335)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1423)
.....
Caused by: android.view.InflateException: Binary XML file line #15: Error inflating class ImageButton
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:782)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:835)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
.....
Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x7f070070
at android.content.res.Resources.getValue(Resources.java:1364)
at android.support.v7.widget.AppCompatDrawableManager.loadDrawableFromDelegates(AppCompatDrawableManager.java:328)
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:193)
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:186)
at android.support.v7.content.res.AppCompatResources.getDrawable(AppCompatResources.java:100)
at android.support.v7.widget.AppCompatImageHelper.loadFromAttributes(AppCompatImageHelper.java:58)
at android.support.v7.widget.AppCompatImageButton.<init>(AppCompatImageButton.java:78)
at android.support.v7.widget.AppCompatImageButton.<init>(AppCompatImageButton.java:68)
at android.support.v7.app.AppCompatViewInflater.createImageButton(AppCompatViewInflater.java:201)
at android.support.v7.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:121)
android.view.InflateException:二进制XML文件行#185:二进制XML文件行#15:膨胀类ImageButton时出错
在android.view.LayoutInflater.inflate(LayoutInflater.java:539)
在android.view.LayoutInflater.充气(LayoutInflater.java:423)
位于android.support.v4.app.Fragment.performCreateView(Fragment.java:2335)
位于android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1423)
.....
原因:android.view.InflateException:二进制XML文件行#15:膨胀类ImageButton时出错
位于android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:782)
位于android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704)
位于android.view.LayoutInflater.rInflate(LayoutInflater.java:835)
位于android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:798)
.....
原因:android.content.res.Resources$NotFoundException:资源ID#0x7f070070
位于android.content.res.Resources.getValue(Resources.java:1364)
在android.support.v7.widget.AppCompatidDrawableManager.loadDrawableFromDelegates(AppCompatidDrawableManager.java:328)上
位于android.support.v7.widget.AppCompatidDrawableManager.getDrawable(AppCompatidDrawableManager.java:193)
在android.support.v7.widget.AppCompatidDrawableManager.getDrawable(AppCompatidDrawableManager.java:186)上
位于android.support.v7.content.res.AppCompatResources.getDrawable(AppCompatResources.java:100)
位于android.support.v7.widget.AppCompatImageHelper.loadFromAttributes(AppCompatImageHelper.java:58)
位于android.support.v7.widget.AppCompatImageButton.(AppCompatImageButton.java:78)
位于android.support.v7.widget.AppCompatImageButton.(AppCompatImageButton.java:68)
在android.support.v7.app.AppCompatViewInflater.createImageButton(AppCompatViewInflater.java:201)上
在android.support.v7.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:121)中
那更有用。跟踪显示,
InflateException
是由Resources$NotFoundException
触发的,这才是真正的罪魁祸首。答案:ic\u chevron\u right\u black\u 24dp.xml文件位于特定的res/drawable-v24
文件夹中,而不是普通的res/drawable
。通过这种方式,id
仅在API 24+上可用。将文件移动到后一个文件夹中确实解决了问题。我的手机运行AndroidM(API 23),这就是它崩溃的原因。找不到ic\u V形\u右侧\u黑色\u 24dp
id
在我不知道的情况下,文件怎么会出现在错误的目录中?我从另一个项目复制了
ic\u chevron\u right\u black\u 24dp.xml
文件。我所做的是将文件粘贴到drawable
资源目录中,同时以Android
查看项目(左上角的下拉列表,允许您选择如何在左侧导航面板中表示项目)。Android studio不知何故决定将文件放入特定的drawable-v24
文件夹,而不是常规的drawable
文件夹
为什么Android Studio没有显示任何错误,为什么预览正确膨胀?布局预览已正确膨胀,因为预览以及
compileSdkVersion
已设置为android-P
。通过这种方式,预览被呈现,就好像它在android-P