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"