我想创建一个ListView列表项,其中包含左侧的TextView和右侧的ImageButton,其选择状态的工作方式与ICS拨号程序应用程序(具体为历史记录选项卡)中的列表项相同。
当用户在拨号器应用程序中按下包含呼叫历史信息的列表项时,整个列表项行背景会改变颜色(为蓝色)。但是,如果用户按下电话图标,则只有电话图标的背景会改变颜色而不是整个列表项行。我想模仿这种行为,但我似乎无法让它正常工作。目前在我的应用程序中,如果用户按下列表项的TextView部分,ImageButton背景将更改为其按下的状态颜色,整个列表项行的背景也会更改(蓝色调)。但是,如果用户按下地图图标,地图图标将更改为其按下状态,并且列表项行背景不会更改为蓝色色调(在这种情况下,这就是我想要的)。
list_item_with_image.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list_item_with_image_container"
android:layout_width="fill_parent"
android:layout_height="@dimen/list_item_height_default"
android:gravity="center_vertical"
android:paddingLeft="10dip"
android:paddingRight="10dp">
<TextView
android:id="@+id/txtItem"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:textAppearance="?android:attr/textAppearanceSmall"/>
<ImageView
android:id="@+id/list_item_divider"
android:layout_width="wrap_content"
android:layout_height="35dp"
android:layout_centerVertical="true"
android:layout_toLeftOf="@+id/map_btn"
android:paddingRight="8dp"
android:scaleType="fitXY"
android:src="@drawable/list_divider_holo_light"/>
<ImageView
android:id="@+id/map_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="5dp"
android:background="@drawable/map_btn_selector"
android:onClick="mapBtnClick"/>
</RelativeLayout>
map_btn_selector.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/map_pressed" android:state_pressed="true"/> <!-- pressed -->
<item android:drawable="@drawable/map_selected" android:state_focused="true"/> <!-- focused -->
<item android:drawable="@drawable/map"/> <!-- default -->
</selector>