我想知道它们之间的实际区别…什么时候应该使用它们,如何使用它们,以及在什么情况下它们是有用的?
Android开发者博客:http://android-developers.blogspot.co.at/2008/12/touch-mode.html
下面的引号应该能说清楚:
触摸模式本身非常容易理解,因为它只是表明最后的用户交互是否与触摸屏进行。例如,如果您使用的是G1手机,选择带有轨迹球的小部件将使您退出触摸模式;
…
在触摸模式下,没有焦点,也没有选择。任何选中的项目在网格中的列表中,一旦用户输入就变为未选中触摸模式。类似地,任何聚焦的小部件在用户进入触摸模式
…
既然你知道焦点在触摸模式下不存在,我必须解释这并不完全正确。焦点可以在触摸模式中存在,但以一种非常特殊的方式,我们称之为可聚焦的触摸模式。这种特殊模式是为接收文本输入的小部件创建的,比如EditText,或者当启用过滤时,ListView。
…
在触摸模式下可聚焦是一个属性,你也可以自己设置从代码或XML。然而,它应该有节制地使用,并且只在这是非常特殊的情况,因为它打破了与Android标准的一致性的行为。游戏是应用程序的一个很好的例子很好地利用了可对焦的触摸模式属性。MapView,如果在谷歌地图的全屏是另一个很好的例子在触摸模式下正确使用可调焦
给出一些例子并详细解释
我将给你我自己的经验:
我有一个Google TV应用程序,它有一个带有大量ImageButtons的activity。
我希望ImageButtons是可选择的。
因此,如果有人用鼠标或远程控制器单击它们,它们就只会被选中(在我的例子中是高亮显示)。然后,如果用户按下所选的ImageButton
,动作触发。这个精确的行为是通过XML布局启用focusableInTouchMode
属性来实现的。
我所要做的就是为ImageButtons设置一个普通的onClickListener
,瞧!
我还没有在手机上检查过我的应用程序,但我想它会提供熟悉的结果。
编辑
什么时候?
我告诉过你一个我测试过的用例:当你想要你的按钮的onClickListener
触发你的第二次点击后,在你第一次点击并选择了Button
.
我使用第一次点击获得"焦点",并在我的按钮上显示缩放缩放动画。
如何?
只需在XML布局文件中设置按钮的属性focusableInTouchMode
为true
。
Focused是视图的一种状态,通常焦点可以通过trackball和dpad进行更改。当state被聚焦时,你的视图可以有不同的背景。
在触摸模式下可调焦允许视图在用户触摸视图时获得焦点,这类组件的一个很好的例子是EditText
。
对于Button
或任何可点击的组件,按下状态通常是您感兴趣的。
用户可以通过使用硬件键或按钮或触摸屏幕与设备进行交互。触摸屏幕会使设备进入触摸模式。然后,用户可以通过触摸屏幕上的虚拟按钮、图像等与它进行交互。
检查设备是否处于触摸模式,调用View类的isInTouchMode()方法。