控件点击事件会穿透给下面的界面--解决办法

问题:

在SlidingDrawer放上一些ImageButton等控件后,发现在ListView上点击时会穿透到下面的界面对象上,而SlidingDrawer上有按键处理的控件则不会。

解决方法:

给控件添加属性:android:clickable="true"

如果抽屉content内嵌了一个布局文件,可以将布局文件中的布局属性中添加此属性。

另:

ViewGroup有两个子ViewGroup A和B,当切换到A时,B隐藏,反之当切换到B时隐藏A。当A在显示在前面时,单击A中的控件,B中的同一个屏幕位置的控件竟然响应了事件,这里称之为Click-Through,单击穿透?

近期在使用开源组件SlidingMenu时就遇到了这样的情形,有网友在使用SlidingDraw时遇到了类似的情况,android内置浏览器也存在类似情况。

那这种情况我们该如何处理呢?比如A显示在前面时,首先要响应A中子view的事件,而且点击A中子view时,touch事件不应传递到B中。

刚开始按照网上说的方法设置B中的click、longClick等事件为false,但点击A中子view时,依然会穿透。

最后的解决方法是这样的:A切换到前面时,在B中重写OnInterceptTouchEvent()方法return true,使A中的touch事件传递不到B的子view中。B切换到前面时,OnInterceptTouchEvent()方法return false,这样B中的控件可以自由的处理touch事件。

时间: 2024-10-06 06:48:59

控件点击事件会穿透给下面的界面--解决办法的相关文章

winform自定义控件中其他遮挡控件点击事件

自定义控件在其他窗口调用时,里面的lable阻挡了控件的点击事件 解决方法 自定义控件中lable的 点击事件 private void Lable1_Click(object sender, EventArgs e) { base.OnClick(e);//触发控件点击事件 } 原文地址:https://www.cnblogs.com/shoumufan/p/10276311.html

在CTreeCtrl控件点击事件中获取点击的项

网上搜了一下,有两种方法: 1.使用GetSelectedItem() HTREEITEM hItem = m_treeCtrl.GetSelectedItem(); CString strText = m_treeCtrl.GetItemText(hItem); MessageBox(strText); 2.使用HitTest() CPoint pt; GetCursorPos(&pt); m_treeCtrl.ScreenToClient(&pt); UINT uFlags; HTRE

ListView使用自定义适配器的情况下实现适配器的文本和图标控件点击事件执行Activity界面中的方法

ListView使用的是自定义适配器,列表项的布局文件中含有文本和图标,实现文本区域和图标区域的点击事件. 实现思路:在自定义适配器MyArrayAdapter 类型中自定义接口和接口方法,分别设置文本区域和图标区域的OnClickListener,然后在activity界面中MyArrayAdapter实例实现这个接口. 1.listitem布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLa

ListView使用自定义适配器的情况下实现适配器的控件点击事件执行Activity界面中的方法

如果ListView使用的是自定义的适配器,比如MyArrayAdapter extends ArrayAdapter<String> 那么,如何实现适配器中的点击事件执行activity界面中的方法呢? 实现思路:在自定义适配器MyArrayAdapter 类型中自定义接口和接口方法,然后在activity界面中MyArrayAdapter实例实现这个接口. 较为完整的代码见上文. 1.MyArrayAdapter 关键代码 自定义接口和方法的代码如下: //列表项的单击事件监听接口 pub

Android控件捕获点击事件的范围

View的Tween动画过程中点击事件的位置并不会因为动画位置的改变而改变,是因为在动画过程中layout的位置实际上没有变,因此曾经一度认为View的点击事件(其实不仅仅是点击事件,包括所有的触摸事件)触发的范围是该View在layout的时候指定的left,top,right,bottom.今天才发现不完全是这样的.一切都是因为平时看代码没有仔细一点所造成了对问题理解不全面. 在这里记录一下发现问题到处理问题的过程. 自定义这样一个ViewGroup,layout两个线性布局,左边的Line

scrollview添加手势 不影响子控件点击事件

给父视图添加手势,但是子视图的点击事件失效了,怎么办?我在写tableView 自定义cel中显示多张图片 可以左右滑动 我在cell里面放了一个collectionView, 点击tableViewCell 跳转到详情页 如果点的是collectionView里的第三张图片,则详情页直接滑到第三张 ,点击其他区域 从第一张开始. 当图片的少的时候 点击collectionView空白区域的时候,tableViewCell的点击代理方法不走,把collectionView的userInterac

ExtJs4.0日期控件只显示年月按年月格式会跳月的解决办法

如果是Ext.form.panel的话,只要设置一下属性就可以.如下代码: { text : '期间', width : 80, sortable : true, dataIndex : 'accountPeriod', format : 'Ym' } 如果是Ext.grid.panel的话,比较麻烦.网上也有各位大神的解决方法,不过都比较麻烦,要重写控件,我向一位大牛请教后整理出一个非常简单的方法,代码: Ext.define('Dpap.branchWithHold.WithHoldGrid

FusionChart图表控件 点击事件(XML和JSON作为数据源时的分别处理方式)

1.JSON作为数据源时: @{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>InChart</title> <script src="~/Scripts/jquery-1.8.2.min.js"&g

UITableViewCell,一些不固定显示的控件,动态隐藏有时会显示不正确的解决办法。

hidden不能只写在自定义的cell类中,而是在判断条件中进行,不需要隐藏的重新设置为显示. if (model.voice == nil) { cell.textContent.text = model.synopsis; cell.textContent.hidden = NO; cell.textContent.text = model.synopsis; } else { cell.textContent.hidden = YES; cell.playBubble.hidden = N