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
本文探讨了在Android中如何正确处理ListView内Button的点击事件,避免与ListView本身的点击事件冲突。介绍了两种解决方案:一是修改ListView的行为,二是采用背景Button的方法。
475

被折叠的 条评论
为什么被折叠?



