我在网上搜索了这个问题的解决方案,并尝试了不同的方法,但没有得到答案。我有一个列表视图和列表行的自定义行布局。在我的列表行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更改为另一个按下的项目形状?如果有人能告诉我如何做到这一点,我当然会感激。这只是应用程序的一小部分,最近一直困扰着我,但是让应用程序看起来更完整是个不错的选择。
答案 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" >
.....