android focusable 什么作用,为什么Android中有2个setFocusable方法?

我试图设置一个组件的可聚焦性并找到这两个方法,希望我可以使用它们使组件只在用户触摸它时可聚焦,而不是以编程方式请求时:

myComponent.setFocusable(false);

myComponent.setFocusableInTouchMode(true);

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值