【发布时间】:2017-06-29 10:07:47
【问题描述】:
可能是个愚蠢的问题,但确实在谷歌上找了 2 小时。 实际上我的应用在 pre lollipop 中崩溃了,但在其他版本中运行良好。以下是崩溃报告。
FATAL EXCEPTION: main
android.view.InflateException: Binary XML file line #15: Error inflating class Button
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:719)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:761)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:769)
at android.view.LayoutInflater.inflate(LayoutInflater.java:498)
at android.view.LayoutInflater.inflate(LayoutInflater.java:398)
at .MvpFragment.onCreateView(MvpFragment.java:59)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2192)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1299)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595)
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:758)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2363)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2149)
at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2103)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2013)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:710)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:176)
at android.app.ActivityThread.main(ActivityThread.java:5419)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1046)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.content.res.Resources$NotFoundException: File res/drawable/custom_button_selected.xml from drawable resource ID #0x7f0200a4
我正在为按钮使用自定义背景,如下所示:
<Button
android:id="@+id/btnCompleted"
android:layout_weight="1"
android:layout_gravity="left"
android:text="Completed"
android:textColor="@android:color/white"
android:background="@drawable/custom_button_selected"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
custom_button_selected.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" >
<shape>
<gradient
android:startColor="?attr/icon_color"
android:endColor="?attr/icon_color"
android:angle="270" />
<stroke
android:width="2dp"
android:color="@color/transparent_color8" />
<corners
android:radius="2dp" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>
</item>
<item android:state_focused="true" >
<shape>
<gradient
android:endColor="?attr/icon_color"
android:startColor="?attr/icon_color"
android:angle="270" />
<stroke
android:width="2dp"
android:color="@color/transparent_color8" />
<corners
android:radius="2dp" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>
</item>
<item>
<shape>
<gradient
android:startColor="?attr/icon_color"
android:endColor="?attr/icon_color"
android:angle="270" />
<stroke
android:width="2dp"
android:color="@color/transparent_color8" />
<corners
android:radius="2dp" />
<padding
android:left="10dp"
android:top="10dp"
android:right="10dp"
android:bottom="10dp" />
</shape>
</item>
</selector>
【问题讨论】:
-
你的
drawable不是在某个 resource-v21 文件夹中吗? -
不,它在 res 文件夹@Ekalips
-
我如何解决 pre lollio 以及其他设备的兼容性问题。@Ekalips
-
第一件事:为什么你的
android:startColor和android:endColor引用相同的属性?如果您只想要一种颜色 - 使用<solid>标签。第二件事:尝试用@color/...替换所有?attr/ -
我遇到了同样的问题。如果 custom_button_selected.xml 文件位于 drawable-v21 文件夹中,请将相同的文件也复制到 drawable 文件夹中。