关于Button点击两次才响应事件相关问题
来源:互联网 发布:java包下载 编辑:程序博客网 时间:2024/05/22 05:11
本文来自http://www.cnblogs.com/xiaoweiz/p/3833079.html
首先我们来看看touch mode的定义。它是用户和手机进行交互时view层次结构的一个状态。它本身是很容易理解的,
代表了最近一次的交互是否是通过触摸屏发生的,因为在Android设备上还存在别的交互方式,比如D-pad、滚动球等等。
为什么Android会引入这样一个mode呢?这是因为从交互、设计方面考虑,当用户直接使用keys或trackball与UI
进行交互的时候,必须先使目标控件获得焦点(比如高亮起来),这样用户才会注意到是什么控件在接收输入。然而如果
设备支持触摸手势的话,用户直接用手指点击控件,这个时候当然就没必要将目标控件高亮了(即获取焦点)。
对于一个拥有触摸屏功能的设备而言, 一旦用户用手点击屏幕, 设备会立刻进入touch mode。这时候被点击的控件
只有isFocusableInTouchMode()为true的时候才会获得focus,比如EditText控件。其他可以触摸的控件比如Button
(其isFocusableInTouchMode默认为false), 当被点击的时候不会获取焦点,它们只是简单地执行onClick事件而已。
任何时候只要用户点击key或滚动trackball, 设备就会退出touch mode,并且找一个view将焦点置于其上,这样用户
可以在不需要再次触摸屏幕的情况下接着和UI进行交互。touch mode在整个系统运行期间都是有效的(跨activities),任何
时候都可以调用View.isInTouchMode()方法来查看当前设备是否处于touch mode状态。
从上面的介绍我们能看出来,在触摸屏下的view,设置了focusableInTouchMode和没设置在用户体验上是不同的,
其实内部的处理逻辑也是不同的,比如:没设置这个属性的控件在用户触摸交互时是不会获得focus的,也就是说focus在
touch过程中是不会改变的,只是其onClickListener如果设置了的话会在up事件到来时触发。而如果设置了focusableInTouchMode
属性的话,它的行为是首先尝试获得focus,如果获得成功的话其onClickListener是不会触发的,只有当你第2次再点击它时,
才会执行onClickListener。可能有些同学在开发中也遇到过这个问题,stackoverflow上有一个同样的问题:
http://stackoverflow.com/questions/20473355/button-is-not-calling-onclicklistener-with-first-click?lq=1,
大家可以参考下。由于设置了这个属性后会引起和android正常交互行为的不一致,所以android建议我们保守地使用这个属性,
在你确定要用它之前最好三思而后行,并且确保你自己看过Android developers blog里关于touch mode介绍的文章:
http://android-developers.blogspot.com/2008/12/touch-mode.html
- 关于Button点击两次才响应事件相关问题
- android中button点击两次才响应onclick方法
- cocos2d-x 3.0 点击button,点击事件响应两次
- 解决dialog中edittext点击两次才响应事件的问题
- 关于监听EditText时需要点击两次才有响应问题
- SetOnClickListener点击两次才响应
- Android Button按钮点击两次之后,才执行点击事件的操作。
- UITableViewCell点击两次才响应的原因
- asp.net中Button按钮点击两次才执行Onclick事件的原因
- android点击事件,第一次无效,第二次才响应的问题
- android点击事件,第一次无效,第二次才响应的问题
- 当一些按钮:比如button或者分页控件需要点击两次才起作用问题
- Button响应鼠标点击事件
- 关于程序两次点击才能正常响应的问题
- android中控件点击两次才响应onclick方法
- android控件两次点击才响应的另一个原因
- Android listView 中响应Button点击事件
- Android listView 中响应Button点击事件
- 将23用二进制进行表示
- maven中的 dependencies 和 dependencyManagement 的区别 以及scope的取值说明
- spi时序的极性和相位
- 计算2个坐标点之间的距离
- spring session redis做session共享
- 关于Button点击两次才响应事件相关问题
- 任意255以内的十进制数转化为16进制数
- 机器学习&深度学习经典资料汇总
- GradleUserGuide中文版 15)文件操作 16)Ant插件
- (屏幕适配)鸿洋大神的Google百分比布局库 android-percent-support-extend
- 类在JVM中的执行过程
- android TouchEvent 处理流程
- 使用git和TortoiseGit上传代码至GitHub
- 指针、const和typedef