选中时动态更改列表行背景

时间:2014-02-02 20:03:43

标签: android xml listview relativelayout

我在网上搜索了这个问题的解决方案,并尝试了不同的方法,但没有得到答案。我有一个列表视图和列表行的自定义行布局。在我的列表行xml文件中,有一个带有ImageView和文本的相对布局。与此同时,我将这种相对布局的背景设置为某种形状,这非常有效。现在在运行时我想更改此列表行背景以显示向内按下(我想只是使填充稍微小一些)。我尝试为压制的形状制作另一个xml文件,但它没有工作。我还尝试通过执行以下操作来编写代码:

RelativeLayout rl = (RelativeLayout)view.findViewById(R.id.relativerow);
                    rl.setBackgroundResource(R.drawable.item_shape_pressed);

我猜我必须制作自己的onPressed方法才能正常工作? 这是我为每个列表行背景使用的形状xml文件:

 <?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/item_shape">
    <padding android:left="10dp"
        android:top="10dp"
        android:right="10dp"
        android:bottom="10dp" />
    <corners android:radius="20dp" />
    <solid android:color="#FFF" />
</shape>

以下是列表视图中每行的XML。看看我坐在顶部的背景属性。

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relativerow"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:background="@drawable/item_shape"
    android:padding="5dip" >


    <LinearLayout android:id="@+id/thumbnail"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="3dip"
        android:layout_alignParentLeft="true"
        android:layout_marginRight="5dip">

        <ImageView
            android:id="@+id/list_image"
            android:layout_width="60dip"
            android:layout_height="60dip"/>

    </LinearLayout>


    <TextView
        android:id="@+id/articletitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/thumbnail"
        android:layout_toRightOf="@+id/thumbnail"
        android:textColor="#040404"
        android:typeface="sans"
        android:textSize="16sp"
        android:textStyle="bold"/>


    <TextView
        android:id="@+id/articldesc"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/articletitle"
        android:textColor="#343434"
        android:textSize="13sp"
        android:textStyle="italic"
        android:layout_marginTop="1dip"
        android:layout_toRightOf="@+id/thumbnail"
   />


</RelativeLayout>

那么,在运行时是否有任何方法可以将此相对视图中的背景从正常的item_shape更改为另一个按下的项目形状?如果有人能告诉我如何做到这一点,我当然会感激。这只是应用程序的一小部分,最近一直困扰着我,但是让应用程序看起来更完整是个不错的选择。

1 个答案:

答案 0 :(得分:2)

尝试为ListView创建自己的选择器,例如res / drawable文件夹中的listview_item_selector.xml,并在RelativeLayout的背景中添加此选择器。

以下代码为:listview_item_selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/item_shape_pressed" android:state_pressed="true" />
    <item android:drawable="@drawable/item_shape_focused" android:state_focused="true" />
    <item android:drawable="@drawable/item_shape" />
</selector>

在你的RelativeLayout中:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/relativerow"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:background="@drawable/listview_item_selector"
    android:padding="5dip" >

    .....