93

我想知道它们之间的实际区别......什么时候应该使用它们,应该如何使用它们,以及它们在哪些情况下有帮助?

举一些例子并详细解释。

4

4 回答 4

83

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

以下引用应该清楚地说明:

就其本身而言,触摸模式非常容易理解,因为它只是指示最后一次用户交互是否是通过触摸屏进行的。例如,如果您使用的是 G1 手机,选择带有轨迹球的小部件将使您脱离触控模式;

...

在触摸模式下,没有焦点,也没有选择。一旦用户进入触摸模式,网格列表中的任何选定项目都将变为未选中状态。类似地,当用户进入触摸模式时,任何有焦点的小部件都会变得没有焦点。

...

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

...

在触摸模式下可聚焦是您可以通过代码或 XML 自行设置的属性。但是,它应该谨慎使用,并且只能在非常特定的情况下使用,因为它会破坏与 Android 正常行为的一致性。游戏是一个很好的应用程序示例,它可以很好地利用触控模式中的可聚焦属性。MapView,如果在谷歌地图中全屏使用,是另一个很好的例子,说明你可以在触摸模式下正确使用可聚焦。

于 2014-06-11T06:43:51.093 回答
12

举一些例子并详细解释

我给你我自己的经验:

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

我希望 ImageButtons 是可选择的。

因此,如果有人用鼠标或遥控器点击它们,它们只会被选中(在我的例子中突出显示)。然后,如果用户按下 selected ImageButton,动作就会触发。这个确切的行为是通过focusableInTouchModeXML 布局启用属性来实现的。

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

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

编辑

什么时候?

我告诉过你一个我测试过的用例:当你希望你的 ButtononClickListener在你第二次点击时触发动作,在你第一次点击并选择Button.

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

如何?

只需在您的 XML 布局文件中设置按钮的属性focusableInTouchMode即可。true

于 2014-06-11T06:54:07.473 回答
7

Focused 是一种视图状态,通常可以使用轨迹球和 dpad 更改焦点。当状态集中时,您的视图可以有不同的背景。

在触摸模式下可聚焦允许视图在用户触摸视图时获得焦点,这种组件的一个很好的例子是EditText.

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

于 2014-06-11T06:47:24.080 回答
3

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

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

于 2015-07-20T19:24:42.260 回答