【发布时间】: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>
引发错误的行是:<item name="android:background" >@drawable/default_button</item>
这很奇怪,因为每当我调用一些 @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