Android的LinearLayout与颜色资源:我做错了什么?

我遵循这个教程来为特定的Android视图创build一个颜色状态列表。 我只是希望它点击时突出显示,所以用户知道为什么屏幕刚刚改变。

当视图呈现时,我得到以下错误:

org.xmlpull.v1.XmlPullParserException:二进制XML文件行#3:标签需要“drawable”属性或子标签定义drawable

我的颜色XML(在res / color / viewcolor.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="#ff33ffff"/> <!-- pressed --> <item android:color="#ff000000"/> <!-- default --> </selector> 

我的布局XML(在res / layout / myview.xml中):

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/myview" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="top" android:background="@color/viewcolor"> <!--crap in the layout--> </LinearLayout> 

我错过了什么?

我记得我通过使用状态drawable而不是状态颜色来解决这个错误。 出于某种原因,布局背景只是无法使用有状态的颜色。 因此,请尝试创build一个有状态的drawable(例如用不同颜色的形状drawable列表)并将其用作背景。

RES /绘制/ pressed.xml:

 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <solid android:color="#ff33ffff" /> </shape> 

RES /绘制/ normal.xml:

 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <solid android:color="#ff000000" /> </shape> 

RES /绘制/ background.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" /> <item android:drawable="@drawable/normal" /> </selector> 

然后使用background.xml作为背景绘制:)

您可以使用android:drawable属性来接受颜色资源(例如@ color / black),而不是在drawable中使用形状。

layout.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/myview" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="top" android:background="@drawable/myDrawable"> <!-- other views in layout--> </LinearLayout> 

my_drawable.xml

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- focused --> <item android:state_focused="true" android:drawable="@color/YOUR_COLOR_HERE" /> <!-- focused and pressed--> <item android:state_focused="true" android:state_pressed="true" android:drawable="@color/YOUR_COLOR_HERE" /> <!-- pressed --> <item android:state_pressed="true" android:drawable="@color/YOUR_COLOR_HERE" /> <!-- default --> <item android:drawable="@color/YOUR_COLOR_HERE" /> </selector> 

my_drawable.xml您需要确保指定的颜色在res/values/colors.xml中定义,否则这将不起作用。

如果要使用图像而不是从颜色资源更改为可绘制资源的颜色。 例:

 android:drawable="@color/YOUR_COLOR_HERE" android:drawable="@drawable/YOUR_IMAGE_HERE"