为什么Android中有2个setFocusable方法?
作者:互联网
我试图设置一个组件的可聚焦性并找到这两个方法,希望我可以使用它们使组件只在用户触摸它时可聚焦,而不是以编程方式请求时:
myComponent.setFocusable(false);
myComponent.setFocusableInTouchMode(true);
然后我看了their documentation:
public void setFocusable (boolean focusable)
Set whether this view can receive the focus. Setting this to false will also ensure that this view is not focusable in touch mode.
public void setFocusableInTouchMode (boolean focusableInTouchMode)
Set whether this view can receive focus while in touch mode. Setting this to true will also ensure that this view is focusable.
那么,如果任何一个调用隐式调用另一个,为什么要区分呢?
解决方法:
视图系统中有两个标志:FOCUSABLE和FOCUSABLE_IN_TOUCH_MODE.每个方法都设置/清除其各自的标志,有两种情况,一种方法影响另一种方法的状态:
>调用setFocusableInTouchMode(true)将确保设置FOCUSABLE标志.
>调用setFocusable(false)将确保清除FOCUSABLE_IN_TOUCH_MODE标志.
换句话说,FOCUSABLE_IN_TOUCH_MODE取决于全局FOCUSABLE标志,如果没有它,则无法设置.
模式的区别有点遗留.我们的想法是区分用户何时使用D-pad或轨迹球导航UI而不是点击触摸屏.目前,设备几乎总是处于“触摸模式”,但仍有少数情况会检查基础FOCUSABLE标志.主要是从输入法的返回键或打开辅助功能时搜索“下一个”视图.
有关不同模式的更多详细信息,您可以阅读SDK View Documentation的“焦点处理”和“触摸模式”部分.
标签:android,focus,android-view,setfocus 来源: https://codeday.me/bug/20190728/1559682.html