Android中ListView和Button共存

这两天在捣鼓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>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章