带有色彩资源的Android LinearLayout:我做错了什么?

ian*_*sme 34 android android-layout

我按照本教程为特定的Android视图创建了一个颜色状态列表.我只是希望它在点击时突出显示,以便用户知道屏幕刚刚更改的原因.

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

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>
Run Code Online (Sandbox Code Playgroud)

我的布局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>
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

Kon*_*rov 52

我记得我通过使用状态drawable而不是状态颜色解决了这个错误.由于某种原因,布局背景不适用于有状态颜色.因此,尝试创建有状态可绘制(例如,具有不同颜色的形状可绘制列表)并将其用作背景.

RES /绘制/ pressed.xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
   <solid android:color="#ff33ffff" />
 </shape>
Run Code Online (Sandbox Code Playgroud)

RES /绘制/ normal.xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
   <solid android:color="#ff000000" />
 </shape>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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

  • android:drawable属性不使用drawable中的形状,而是接受颜色资源(例如@ color/black). (14认同)

Aus*_*ney 50

您可以使用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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

my_drawable.xml您需要确保您指定的颜色被定义res/values/colors.xml,或者这将不起作用.

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

android:drawable="@color/YOUR_COLOR_HERE"
android:drawable="@drawable/YOUR_IMAGE_HERE"
Run Code Online (Sandbox Code Playgroud)

  • 工作完美.对于那些不熟悉colors.xml文件的人,请参阅http://stackoverflow.com/questions/3769762/android-color-xml-resource-file (3认同)
  • 这对我来说不是很有效.我不得不将选择器项中的android:drawable更改为android:color然后它工作正常. (2认同)