focusable和focusableInTouchMode之间的区别?


80

我想知道它们之间的实际区别...什么时候应该使用每种方法,应该怎样使用它们,以及在每种情况下都有帮助?

给出一些例子并详细解释它们。



android-developers.blogspot.fi/2008/12/touch-mode.html在这里,罗曼说,除非您正在开发游戏,否则应避免使用focusableInTouchMode
Niko

2
如果focusable = false-如果按键盘上的“下一步”按钮,则无法聚焦此视图,甚至不能聚焦于EditText。
Volodymyr Kulyk 2014年

Answers:


76

在Android开发者博客中对此进行了说明:http : //android-developers.blogspot.co.at/2008/12/touch-mode.html

以下引号应使之清楚:

就其本身而言,触摸模式非常容易理解,因为它仅指示是否使用触摸屏执行了最后一次用户交互。例如,如果您使用的是G1手机,则选择带有轨迹球的小部件将使您退出触摸模式。

...

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

...

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

...

您可以通过代码或XML设置自己在触摸模式下可聚焦的属性。但是,应谨慎使用它,并且只能在非常特殊的情况下使用,因为它会破坏与Android正常行为的一致性。游戏是可以充分利用触摸模式属性中的可聚焦特性的应用程序的典范。如果在Google地图中以全屏方式使用MapView,则是另一个可以在触摸模式下正确使用可聚焦的好例子。


5
正确的SO风格的好答案。谢谢
乔普(Joop)

11

举例并详细解释

我会给你我自己的经验:

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

我希望ImageButtons是可选的。

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

我要做的就是设置一个普通的 onClickListener为ImageButton和voila的!

我尚未在手机上检查过我的应用程序,但我想它将带来熟悉的结果。

编辑

什么时候?

我已经告诉您一个经过测试的用例:当您希望您的按钮onClickListener在第二次单击时触发操作时,请先单击并选择Button

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

怎么样?

按钮的属性刚刚成立focusableInTouchModetrue你的XML布局文件。


何时使用它们。他们如何提供帮助
AndroidGeek 2014年

6

聚焦是一种查看状态,通常可以使用轨迹球和dpad更改聚焦。当重点关注状态时,您的视图可以具有不同的背景。

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

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


“使用Button或任何可单击的组件,您应该专注于按下状态。” 什么?答案的其余部分+1
ataulm 2015年

3

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.