【问题标题】:App crashes in pre lollipop棒棒糖前的应用程序崩溃
【发布时间】: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:startColorandroid:endColor 引用相同的属性?如果您只想要一种颜色 - 使用 &lt;solid&gt; 标签。第二件事:尝试用@color/...替换所有?attr/
  • 我遇到了同样的问题。如果 custom_button_selected.xml 文件位于 drawable-v21 文件夹中,请将相同的文件也复制到 drawable 文件夹中。

标签: android android-layout


【解决方案1】:

android {defaultConfig { vectorDrawables.useSupportLibrary = true}}

【讨论】:

【解决方案2】:

StateListDrawable 可用于更改按钮的状态(按下、聚焦...),如果您打算使用 custom_button_selected.xml 作为背景来更改按钮的状态,那么您在内部缺少 drawable您的 selector 特别是在您的 item 标签中,因为它是必需的。像这样的:

&lt;item android:state_pressed="true" android:drawable="@color/transparent_color8"&gt; .... &lt;/item&gt; - 或者你想用的任何颜色

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多