focusable和focusableInTouchMode之间的区别?

时间:2014-06-11 06:25:48

标签: android focus focusable

我想知道它们之间的实际差异......每个应该何时使用,每种方法应该如何使用,以及哪些情况都有用?

举一些例子并详细解释。

4 个答案:

答案 0 :(得分:62)

Android开发者博客中解释了这一点:http://android-developers.blogspot.co.at/2008/12/touch-mode.html

以下引用应该清楚说明:

  

触摸模式本身非常容易理解,因为它只是表明最后一次用户交互是否是通过触摸屏执行的。例如,如果您使用G1手机,选择带轨迹球的小部件将使您退出触摸模式;

...

  

在触控模式下,没有焦点也没有选择。任何选定的项目   一旦用户输入,就在网格列表中取消选择   触摸模式。同样,任何有焦点的小部件都会变得没有焦点   用户进入触摸模式。

...

  

现在您知道在触摸模式下不存在焦点,我必须解释它并非完全正确。焦点可以存在于触摸模式中,但是以非常特殊的方式,我们将焦点称为触摸模式。此特殊模式是为接收文本输入的小部件创建的,如EditText,或者在启用过滤时,为ListView创建。

...

  

可触控模式中的可聚焦属性是您可以自己设置的属性   来自代码或XML。但是,它应该谨慎使用,而且只能用于   非常具体的情况,因为它打破了Android正常的一致性   行为。游戏是可以制作的应用程序的一个很好的例子   充分利用可触控模式属性。 MapView,如果用于   像谷歌地图一样全屏,是另一个很好的例子   在触摸模式下正确使用可聚焦。

答案 1 :(得分:9)

  

举一些例子并详细解释

我会给你自己的经验:

我有一个Google TV应用程序,其活动包含大量ImageButtons。

我希望ImageButtons可以选择。

因此,如果某人使用鼠标或遥控器点击它们,它们将仅被选中(在我的情况下突出显示)。然后,如果用户按下选定的ImageButton,则触发操作。 通过XML布局启用focusableInTouchMode属性,实现了这种确切的行为。

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

我没有在手机上查看我的应用程序,但我想这会产生熟悉的结果。

修改

  

当?

我已经告诉过你我测试过的一个用例:当你第一次点击并选择了onClickListener时,你希望按钮的Button触发第二次点击动作。

我使用第一次点击获得“焦点”并在我的按钮上显示放大缩放动画。

  

如何?

只需在XML布局文件中将按钮的属性focusableInTouchMode设置为true

答案 2 :(得分:5)

聚焦是视野状态,通常可以通过轨迹球和dpad改变焦点。在关注状态时,您的观点可以有不同的背景。

在触控模式下,可聚焦可让视线在用户触摸视图时获得焦点,此类组件的良好示例为EditText

使用Button或任何可点击的组件按下状态通常是您感兴趣的。

答案 3 :(得分:3)

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

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