【问题标题】:Problems with XML drawables in AndroidAndroid 中 XML 可绘制对象的问题
【发布时间】:2016-07-24 19:06:57
【问题描述】:

几个小时前,我刚刚在这里发布了this question,经过一段艰难的时间后,我可以在大量的可绘制对象和活动中找出实际出了什么问题。但是现在我真的不明白为什么它不起作用。

我为一个按钮创建了一个可绘制的 xml,然后我在 styles.xml 文件中定义了它自己的样式。第一个引起我注意的是,当我在实际样式上调用 xml 可绘制对象时,Android Studio 无法从中显示图标,因此它会显示一个红色感叹号(在该行旁边的代码部分)。无论如何,它在大多数设备上都能正常工作,但我刚刚发现在某些特定情况下,它会抛出由该 xml drawable 引起的 InflateException。我真的不知道我要展示的代码有什么问题。

这是 xml 可绘制对象 (default_button.xml):

<?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="5dp" />
            <stroke android:width="1dip" android:color="@color/green_temp" />
            <gradient android:angle="-90" android:startColor="@color/green_temp" android:endColor="@color/green_temp"  />
        </shape>
    </item>

    <item android:state_focused="true">
        <shape android:shape="rectangle"  >
            <corners android:radius="5dp" />
            <stroke android:width="1dip" android:color="@color/black" />
            <solid android:color="@color/bright_green"/>
        </shape>
    </item>
    <item >
        <shape android:shape="rectangle"  >
            <corners android:radius="5dp" />
            <stroke android:width="1dip" android:color="@color/bright_green" />
            <gradient android:angle="-90" android:startColor="@color/green_temp" android:endColor="@color/button_green" />
        </shape>
    </item>
</selector>

然后我在 Styles.xml 文件中设置这样的样式:

<style name="ButtonNormalText" parent="@android:style/Widget.Button">
        <item name="android:textColor" >@color/black</item>
        <item name="android:textSize" >25dip</item>
        <item name="android:height" >44dip</item>
        <item name="android:background" >@drawable/default_button</item>
          <item name="android:focusable" >true</item>
          <item name="android:clickable" >true</item>
</style>

引发错误的行是:&lt;item name="android:background" &gt;@drawable/default_button&lt;/item&gt;

这很奇怪,因为每当我调用一些 @drawable/xml_drawable 时,它​​都会抛出:

FATAL EXCEPTION: main
Process: myapp.miquel.mqlapps.hombresmujeresapp, PID: 13239
   java.lang.RuntimeException: Unable to start activity ComponentInfo{myapp.miquel.mqlapps.hombresmujeresapp/myapp.miquel.mqlapps.hombresmujeresapp.MenuActivity}: android.view.InflateException: Binary XML file line #43: Error inflating class android.support.v7.internal.widget.ActionBarContextView

Caused by: android.view.InflateException: Binary XML file line #43: Error inflating class android.support.v7.internal.widget.ActionBarContextView

Caused by: java.lang.reflect.InvocationTargetException

Caused by: java.lang.RuntimeException: org.xmlpull.v1.XmlPullParserException: <internal>: <nine-patch> requires a valid 9-patch source image

我真的不知道为什么它可以在大多数设备上运行,但在另一个设备上却失败了。任何想法为什么?如果您需要查看更多代码,您实际上可以访问我在本文开头提供的链接。提前致谢!

【问题讨论】:

  • 你还有其他名为default_button的可绘制资源(如png)吗?
  • 没有。 default_button 只是一个 xml 文件。没有具有该名称的图像。无论如何,正如我所说,它适用于 2/3 设备。因此,如果这是一个主要问题,它可能会在大多数设备中失败,但事实并非如此。我真的不知道这个问题是怎么回事。这是一种痛苦。
  • 失败的设备有什么共同点吗? (Android 版本?制造商?)出于好奇,不妨尝试将您的三个形状制作成单独的 XML 可绘制对象,并在选择器可绘制对象中的三个项目状态中的每一个上使用 android:drawable="..."
  • 我只知道一个应用程序无法运行的设备,所以我不知道出现故障的设备之间的共同因素。谢谢你的主意!会检查的!
  • 哪个设备应用程序未运行以及设备的操作系统版本

标签: java android button styles


【解决方案1】:

好的,我终于通过从零启动应用程序来解决它。只需将原始代码复制到新项目中,一切都像黑魔法诅咒一样重新开始工作。很抱歉,我无法提出更具体的解决方案,但这就是我修复这个奇怪错误的真诚方法。

我只能说 R 文件似乎在某些时候损坏了,而我没有意识到这一点。因此,在创建一个新项目后,由于新的 R 文件没有损坏,应用程序再次开始工作。

谢谢。

【讨论】:

  • 也许只是一个clean assembleDebug 就可以修复原始项目?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-19
  • 2020-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多