如何为每个列表视图项设置不同的按下状态颜色?

时间:2011-06-08 09:23:29

标签: android

其实我正在开发一个有多个listview的android应用程序。 在ListView的实现中,我为每个列表视图项膨胀一个单元格。 这是category_cell.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="60dip"
    android:id="@+id/cell_layout"
    android:background="@drawable/list_bg">
    <RelativeLayout
        android:id="@+id/category_cell_layout"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
        <ImageView
            android:id="@+id/category_image"
            android:layout_centerVertical="true"
            android:layout_marginLeft="10dip"
            android:layout_height="45dip"
            android:layout_width="45dip" />
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/category_name"
            android:text="Category Name"
            android:textSize="16dip"
            android:typeface="sans"
            android:layout_centerVertical="true"
            android:layout_marginLeft="70dip"
            android:textColor="@color/white" />
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/arrow_image"
            android:background="@drawable/list_arrow"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:layout_marginRight="10dip" />
    </RelativeLayout>
</RelativeLayout>

在这个单元格的背景上,放置一个可绘制的xml。 list_bg.xml有以下代码:

<?xml version="1.0" encoding="utf-8"?>
<selector
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:state_selected="false"
        android:state_pressed="false"
        android:drawable="@color/transparent" />
    <item
        android:state_pressed="true"
        android:drawable="@color/blue" />
    <item
        android:state_selected="true"
        android:state_pressed="false"
        android:drawable="@color/blue" />
</selector>

在使用项目填充列表视图时,我想为每个项目设置背景xml的按下和聚焦状态的不同颜色。每个项目都包含一个颜色的值,我想在该项目的按下状态下设置该颜色。

StateListDrawable states = new StateListDrawable();
states.addState(new int[] {android.R.attr.state_pressed},getResources().getDrawable(R.color.translucent_red));
states.addState(new int[] {android.R.attr.state_focused},getResources().getDrawable(R.color.white));
states.addState(new int[] { },getResources().getDrawable(R.color.white));
row.setBackgroundDrawable(states);

我曾试图实现这个但是这通常接受drawable作为add_state函数的第二个参数但是我想在那里发布一个颜色.... 谁能请帮帮我???

1 个答案:

答案 0 :(得分:0)

只需更改list_bg.xml即可。这只是您可以设置自己的颜色的示例

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

<item android:state_pressed="true"><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
       <gradient android:angle="90" android:centerColor="#6da23f" android:endColor="#8bc45d" android:startColor="#2f481c" />

        <stroke android:width="2dp" android:color="#999999" />

        <padding android:bottom="4dp" android:left="3dp" android:right="3dp" android:top="6dp" />

         <corners android:radius="10px"/>
    </shape></item>
<item><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
        <gradient android:angle="90" android:centerColor="#6da23f" android:endColor="#8bc45d" android:startColor="#4c8a39" />

        <stroke android:width="1dp" android:color="#FFFFFF" />

        <padding android:bottom="4dp" android:left="3dp" android:right="3dp" android:top="6dp" />

        <corners android:radius="10px"/>
    </shape></item>