focusable和focusableInTouchMode之间的区别?

我想知道他们之间的实际区别……什么时候应该分别被使用,每个人应该如何使用,以及在哪些情况下都有帮助?

举一些例子,并详细解释它们。

这是在Android开发人员博客中解释: http : //android-developers.blogspot.co.at/2008/12/touch-mode.html

下面的引用应该清楚:

本身,触摸模式是非常容易理解的,因为它仅仅指示是否用触摸屏进行了最后的用户交互。 例如,如果您使用的是G1手机,则使用轨迹球select小部件将使您脱离触摸模式;

在触摸模式下,没有焦点,也没有select。 一旦用户进入触摸模式,网格列表中的任何选定项目都将被取消select。 类似地,当用户进入触摸模式时,任何聚焦的小部件都变得不专心。

现在你知道焦点并不存在于触摸模式中,我必须解释它并不完全正确。 焦点可以存在于触摸模式中,但是以非常特殊的方式, 这个特殊的模式是为接收文本input的小部件创build的,比如EditText,或者在启用过滤时使用ListView。

可以在触摸模式下进行对焦是一种属性,您可以使用代码或XML来设置自己的属性。 但是,它应该谨慎使用,只能在非常特定的情况下使用,因为它与Android正常行为不符。 游戏是一个很好的例子,可以很好地利用可触摸模式属性中的焦点。 如果在Google地图中以全屏模式使用MapView,那么MapView是另一个很好的例子,您可以在触摸模式下正确使用焦点。

举一些例子,并详细解释它们

我会给你我自己的经验:

我有一个Google TV应用程序,它有很多ImageButton的活动。

我想ImageButtons是可选的。

所以如果一个人用鼠标或遥控器点击它们,它们只会被选中(在我的情况下突出显示)。 然后,如果用户按下所选的ImageButton ,则触发该操作。 这种确切的行为是通过XML布局启用focusableInTouchMode属性来实现的。

我所要做的就是为ImageButtons设置一个普通的onClickListener,瞧!

我没有检查我的手机应用程序,但我想它会提供熟悉的结果。

编辑

什么时候?

我已经告诉过你一个我testing过的用例:当你想让你的Button的onClickListener触发你的第二次点击操作时,首先点击并selectButton

我用第一次点击来获得“焦点”,并在我的button上显示一个放大的放大animation。

怎么样?

只需在XML布局文件中将button的属性focusableInTouchModetrue

重点是一个国家的观点,一般焦点可以改变跟踪球和dpad。 当国家关注时,你的观点可以有不同的背景。

在触摸模式下可以进行对焦,当用户触摸视图时,视图可以获得焦点,这种组件的好例子就是EditText

使用Button或任何可点击的组件,您应该专注于按下状态。

用户可以使用硬件按键或button,或通过触摸屏幕与设备进行交互。 触摸屏幕会使设备进入触摸模式。 然后,用户可以通过触摸屏幕上的虚拟button,图像等来与其交互

要检查设备是否处于触摸模式,请调用View类的isInTouchMode()方法。