首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >旧手机充气布局错误

旧手机充气布局错误
EN

Stack Overflow用户
提问于 2015-05-19 21:47:33
回答 2查看 172关注 0票数 0

这段代码在Nexus 5/Lollipop5.1上运行良好,但是当我尝试在糟糕的LG E615f/ICS 4.0.4上运行时,这个奇怪的错误就开始发生了。

代码语言:javascript
复制
05-19 18:34:07.639  13037-13037/? E/AndroidRuntime﹕ FATAL EXCEPTION: main
    android.view.InflateException: Binary XML file line #63: Error inflating class android.widget.ImageButton
            at android.view.LayoutInflater.createView(LayoutInflater.java:606)
            at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
            at android.view.LayoutInflater.onCreateView(LayoutInflater.java:653)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:678)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:739)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
            at com.myclass.adapters.TasksAdapter.getView(TasksAdapter.java:66)
            at android.widget.AbsListView.obtainView(AbsListView.java:2466)
            at android.widget.ListView.makeAndAddView(ListView.java:1772)
            at android.widget.ListView.fillDown(ListView.java:672)
            at android.widget.ListView.fillFromTop(ListView.java:732)
            at android.widget.ListView.layoutChildren(ListView.java:1625)
            at android.widget.AbsListView.onLayout(AbsListView.java:2296)
            at android.view.View.layout(View.java:11345)
            at android.view.ViewGroup.layout(ViewGroup.java:4224)
            at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1658)
            at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1516)
            at android.widget.LinearLayout.onLayout(LinearLayout.java:1429)
            at android.view.View.layout(View.java:11345)
            at android.view.ViewGroup.layout(ViewGroup.java:4224)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:431)
            at android.view.View.layout(View.java:11345)
            at android.view.ViewGroup.layout(ViewGroup.java:4224)
            at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1658)
            at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1516)
            at android.widget.LinearLayout.onLayout(LinearLayout.java:1429)
            at android.view.View.layout(View.java:11345)
            at android.view.ViewGroup.layout(ViewGroup.java:4224)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:431)
            at android.view.View.layout(View.java:11345)
            at android.view.ViewGroup.layout(ViewGroup.java:4224)
            at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1658)
            at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1516)
            at android.widget.LinearLayout.onLayout(LinearLayout.java:1429)
            at android.view.View.layout(View.java:11345)
            at android.view.ViewGroup.layout(ViewGroup.java:4224)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:431)
            at android.view.View.layout(View.java:11345)
            at android.view.ViewGroup.layout(ViewGroup.java:4224)
            at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1658)
            at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1516)
            at android.widget.LinearLayout.onLayout(LinearLayout.java:1429)
            at android.view.View.layout(View.java:11345)
            at android.view.ViewGroup.layout(ViewGroup.java:4224)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:431)
            at android.view.View.layout(View.java:11345)
            at android.view.ViewGroup.layout(ViewGroup.java:4224)
            at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1493)
            at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2452)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4476)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:816)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:583)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.reflect.InvocationTargetException
            at java.lang.reflect.Constructor.constructNative(Native Method)
            at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
            at android.view.LayoutInflater.createView(LayoutInflater.java:586)
            at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
            at android.view.LayoutInflater.onCreateView(LayoutInflater.java:653)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:678)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:739)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
            at com.myclass.adapters.TasksAdapter.getView(TasksAdapter.java:66)
            at android.widget.AbsListView.obtainView(AbsListView.java:2466)
            at android.widget.ListView.makeAndAddView(ListView.java:1772)
            at android.widget.ListView.fillDown(ListView.java:672)
            at android.widget.ListView.fillFromTop(ListView.java:732)
            at android.widget.ListView.layoutChildren(ListView.java:1625)
            at android.widget.AbsListView.onLayout(AbsListView.java:2296)
            at android.view.View.layout(View.java:11345)
            at android.view.ViewGroup.layout(ViewGroup.java:4224)
            at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1658)
            at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1516)
            at android.widget.LinearLayout.onLayout(LinearLayout.java:1429)
            at android.view.View.layout(View.java:11345)
            at android.view.ViewGroup.layout(ViewGroup.java:4224)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:431)
            at android.view.View.layout(View.java:11345)
            at android.view.ViewGroup.layout(ViewGroup.java:4224)
            at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1658)
            at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1516)
            at android.widget.LinearLayout.onLayout(LinearLayout.java:1429)
            at android.view.View.layout(View.java:11345)
            at android.view.ViewGroup.layout(ViewGroup.java:4224)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:431)
            at android.view.View.layout(View.java:11345)
            at android.view.ViewGroup.layout(ViewGroup.java:4224)
            at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1658)
            at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1516)
            at android.widget.LinearLayout.onLayout(LinearLayout.java:1429)
            at android.view.View.layout(View.java:11345)
            at android.view.ViewGroup.layout(ViewGroup.java:4224)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:431)
            at android.view.View.layout(View.java:11345)
            at android.view.ViewGroup.layout(ViewGroup.java:4224)
            at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1658)
            at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1516)
            at android.widget.LinearLayout.onLayout(LinearLayout.java:1429)
            at android.view.View.layout(View.java:11345)
            at android.view.ViewGroup.layout(ViewGroup.java:4224)
            at android.widget.FrameLayout.onLayout(FrameLayout.java:431)
            at android.view.View.layout(View.java:11345)
            at android.view.ViewGroup.layout(ViewGroup.java:4224)
            at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1493)
            at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2452)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:137)
            at android.app.ActivityThread.main(ActivityThread.java:4476)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:816)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:583)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: android.content.res.Resources$NotFoundException: File res/drawable/ripple.xml from drawable resource ID #0x7f0200b

下面是它抱怨的ImageButton

代码语言:javascript
复制
<ImageButton
        android:id="@+id/taskItemDownloadBtn"
        android:layout_width="@dimen/listItemIconSize"
        android:layout_height="@dimen/listItemIconSize"
        android:layout_gravity="center"
        android:src="@drawable/ic_cloud"
        android:background="@drawable/ripple"
        android:contentDescription="@null" />

ripple.xml的两个版本并没有发现:

drawable/ripple.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape android:shape="rectangle">
            <corners android:radius="16dp" />
            <solid android:color="?colorControlHighlight" />
        </shape>
    </item>
</selector>

drawable-v21/ripple.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<ripple
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?colorControlHighlight"/>

我试着:

  • 将组件从ImageButton更改为ImageViewButton,但没有成功;
  • 清洁项目;
  • 删除可绘制的背景;
  • 再清洁一下这个项目
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-19 22:31:59

发现问题了。实际上是drawable/ripple.xml。当我删除它时,在具有相同问题的其他可绘制XML中发生了错误。

在可绘制的XML中,旧的Android似乎不能解释属性引用,例如:?colorAccent?attr:colorControlHighlight,只能在布局XML中解释。必须退到那里直接引用颜色:

代码语言:javascript
复制
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape android:shape="rectangle">
            <corners android:radius="16dp" />
            <solid android:color="@color/makara" />
            <!-- `?colorControlHighlight` does not work here -->
        </shape>
    </item>
</selector>

谢谢那个提出这个建议的人,他后来删除了答案!

票数 0
EN

Stack Overflow用户

发布于 2015-05-19 22:08:56

这个问题是由ResourcesNotFoundException引起的。

代码语言:javascript
复制
Caused by: android.content.res.Resources$NotFoundException: File res/drawable/ripple.xml from drawable resource ID #0x7f0200b

尝试在ripple.xml文件夹中添加文件/drawable

*-如果您已经拥有该资源,只需刷新项目并重新构建,以确保将资源ID #0x7f0200b添加到R.java文件中。

的问题是:属性:

代码语言:javascript
复制
 android:color="?colorControlHighlight"

是在API 21中添加的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30336732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档