这两天在捣鼓ListView widget,为了在ListView中加入Button这类的有 “点击” 事件的widget,请教了不少高手,感谢LandMark对我的认真讲解,下面把解决过程描述一下。
ListView 和 其它能触发点击事件的widget无法一起正常工作的原因是加入其它widget后,ListView的itemclick事件将无法触发,被其它widget的click事件屏蔽。
首先,说明一下,ListView中每一行包括以下三项:
一个ImageView, 一个TextView,一个ImageButton,依次排开。
以下是layout的内容,分为两部分:
res/layout/main.xml
<?xml version="1.0"encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="10dip" android:orientation="vertical">
<ListView android:id="@id/android:list" android:layout_width="fill_parent" android:layout_height="fill_parent"/> </LinearLayout> |
因为继承了ListActivity,所以ListView 的id设置为"@id/android:list"是必须的
res/layout/lvitem.xml
注意:
在<RelativeLayout>中
android:descendantFocusability="blocksDescendants"
和<ImageButton>中
android:focusable="false"
这两项的设置很关键,如果不设置,将导致ListView的ItemClick事件将无法触发,该事件被ImageButton的click事件屏蔽了。
<?xml version="1.0"encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="5dip" android:descendantFocusability="blocksDescendants"> <ImageView android:id="@+id/ItemImage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dip" /> <!-- 把按钮背景设置为透明: android:background="#00000000" 把按钮背景设置为半透明: android:background="#e0000000" --> <ImageButton android:id="@+id/ItemCloseWin" android:layout_alignParentRight="true" android:layout_alignTop="@+id/ItemWinName" android:layout_alignBottom="@+id/ItemWinName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#e0000000" android:gravity="left|center_vertical" android:focusable="false" android:src="@android:drawable/ic_menu_close_clear_cancel" /> <TextView android:id="@+id/ItemWinName" android:layout_toRightOf="@+id/ItemImage" android:layout_toLeftOf="@+id/ItemCloseWin" android:layout_alignTop="@+id/ItemImage" android:layout_alignBottom="@+id/ItemImage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="left|center_vertical" android:textSize="20dip" android:text="title" /> </RelativeLayout> |
转载于:https://blog.51cto.com/zhaojianping/633877