?
Android菜鸟日记
26 ListView中放置button
?
ListView放置button是一个很麻烦的事情 网上说的 一般都是如何实现button 和 listView同时被点击,可视做HDEasyCall 时候更多的需要listview和button不能同时点击。 |
?
首先如果想要ListView里面的button被点击,且listView也能被点击。
如果直接添加的话 只能点击到button而不能点击到ListView,因为焦点被button获取了。
一、那么需要:让button不要成为焦点:
?
唯一的办法是在listView的填充布局文件[lis_Item.xml]中对根节点
设置
android:descendantFocusability="blocksDescendants"
然后 再让button无法获得焦点 如果button获得焦点则 无法传到listView
<button android:focusable="false">
设置完上面2个? 此时的button 和listView 都能被点击,且监听都能触发。
?
?
二、坑爹的事情也来了,
如果你点击button也就罢了,但是如果你点击到listView 系统会认为你点击到了listview的顶级view 也就是button的父节点。此时会认为 此listView的单元view[也就是那个填充的根节点]内的所有子节点都被选中。既点击listView 时填充的button也会被点击。这是不允许的。
?
思前想后解决办法有2个:
1.让重写ListView让ListView被点击时不要把点击事件传到填充view的下一层,只让顶层的节点接到。
2.舍弃listView监听,把填充view做成一个背景为整个view大小的button[我称它为背景button],上面再放置其他button[或者其他,此处一般使用相对布局],那么只需要把之前写给listView的监听写给那个背景button就可以了。
?
代码如下:
可以参照HDEasyCall项目看
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <Button android:id="@+id/bt_list" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/list_line_bg" android:onClick="funClick" /> <TextView android:layout_marginLeft="28dp" android:layout_marginTop="10dp" android:id="@+id/tx1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="18dp" android:textColor="#2b82e8" /> <TextView android:layout_marginLeft="28dp" android:layout_marginRight="9dp" android:id="@+id/tx2" android:layout_below="@id/tx1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="14dp" android:textColor="#6c6c6c" /> <Button android:layout_alignParentRight="true" android:id="@+id/bt3" android:layout_width="wrap_content" android:textColor="#ffffff" android:layout_height="wrap_content" android:layout_marginLeft="30dp" android:layout_marginTop="76dp" android:layout_marginRight="15dp" android:paddingLeft="12dp" android:onClick="funClick" android:background="@drawable/selector_button_phonecall" /></RelativeLayout>
??
2011-10-31
poolo