Binary XML file line : Error inflating class <unknown> 解决

思路:1.官方文档

2.百度、谷歌


情况解问题:今天在捣鼓了button,我想做个这样的效果:不同的state来触发不同的按钮背景颜色。我当时为了测试就简单写了个:


新建res/drawable/selector.xml:

selector.xml

<?xml

version="1.0"

encoding="utf-8"

?> 

<selector

xmlns:android="http://schemas.android.com/apk/res/android"> 

<item

      android:state_pressed="true"

      android:color="#3197FF"/>

</selector>

main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical" android:layout_width="fill_parent"
	android:layout_height="fill_parent">

	<Button android:id="@+id/button3"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content" android:text="这是button" 
		android:background="@drawable/selector"/>



</LinearLayout>

运行项目出现错误:<item> tag requires a 'drawable' attribute or child tag defining a drawable 大概的意思就是:item标签需要一个drawable属性或者一个子标签来定义一个drawable属性。


于是我去官网查看了selector相关信息(http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList),发现关于Button有这样一段代码:

EXAMPLE:
XML file saved at res/drawable/button.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:drawable="@drawable/button_pressed" /> <!-- pressed -->
    <item android:state_focused="true"
          android:drawable="@drawable/button_focused" /> <!-- focused -->
    <item android:state_hovered="true"
          android:drawable="@drawable/button_focused" /> <!-- hovered -->
    <item android:drawable="@drawable/button_normal" /> <!-- default -->
</selector>
This layout XML applies the state list drawable to a Button:

<Button
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:background="@drawable/button" />

发现 android:drawable="@drawable/button_pressed" 这行,但是还是一头雾水,好吧,我直接百度问题,找到这个问题解决方案http://www.360doc.com/content/13/0503/11/12091541_282627062.shtml,自己看了下。


解决方案一:

最后这样修改就出效果了

selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

   <item
    android:state_pressed="true"
    android:drawable="@drawable/juhuangse"/> 
</selector>

新建res/value/colors.xml:

colors.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    
    <drawable name="juhuangse">#EE9A00</drawable>
  
</resources>

main.xml不变
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical" android:layout_width="fill_parent"
	android:layout_height="fill_parent">

	<Button android:id="@+id/button3"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content" android:text="这是button" 
		android:background="@drawable/selector"/>



</LinearLayout>

运行项目,效果OK了,这里没贴些效果图。


为什么这样修改就可以呢?大概原因正如上面一篇解决方案里面说的,关于修改背景,你不能使用color 属性的selector,应该使用drawable属性的selector。


解决方案二:

另一种稍微繁琐的解决方案

新建res/drawable/selector.xml:

selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

   <item

    android:state_pressed="true"

    android:drawable="@drawable/pressed"/> 
    
</selector>

新建res/drawable/pressed.xml:

pressed.xml

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle">
    <solid android:color="@drawable/juhuangse" />
</shape>
main.xml以及colors.xml同第一个解决方案。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇