Android Focusable in Touch Mode 介绍

在学习 ListView 源码时,发现了 Focusable in Touch Mode 这个概念,注释的意思是:

whether this view can receive focus while in touch mode

字面意思是 一个 View 在 touch mode 下是否可以接收焦点。

什么是 touch mode 呢?

下面总结 官方文档 Touch Mode 的介绍:

Touch Mode

由于现在安卓手机基本都是触摸屏,导致我们没有意识到 Touch Mode 其实是一种特殊的状态,不同于 Selection, Focus。

在几年前,有些安卓手机上面还保留着键盘、触摸球(上图红色圈内),这个触摸球的作用相当于现在电视遥控器的上下左右键。

当我们用手触摸屏幕选中内容后,会进入 Touch Mode; 但是当我们用触摸球左右移动(按下遥控器方向键也一样)时,就会离开 Touch Mode;

听起来似乎很简单,但是一个控件还有其他状态,当这些状态切换时,你就要小心搞晕了。

Touch Mode, Selection, and Focus

安卓手机在过去的几年里经历了多种输入方式,比如手指、电容笔、 键盘、触摸球等等,开发人员需要对这些不同的操作有不同的响应。

现在的安卓应用开发比那个年代要轻松多了,但是在物联网发展下,我们还要考虑智能电视等其他智能设备的这些输入情景。

想象一下,有一个 ListView,当我们选中一个 Item 时,会进入 selected 状态 :

但是当我们按着的同时滑动手指,ListView 会滑动,同时你选中的这个 Item 会退出 selected 状态,你可以试试。

为什么会这样呢?

根据 官方文档 可以知道,framework 层为了降低有多种输入方式((比如同时支持触摸和遥控的智能电视)的情况下状态保持的复杂性,规定 In touch mode, there is no focus and no selection ,一旦一个 View 进入 touch mode, 它的 focused 和 selected 状态会被去掉。

In touch mode, there is no focus and no selection.

好的,我记住了。

但是!还有例外情况。

→_→

Focusable in Touch Mode

一般情况下在 touch mode 时会退出 focused 状态,但是在有些情况下我们希望在 touch mode 时仍然保持 focused 状态,于是有了这个值 focusableInTouchMode, 常用在 输入框 EditText 或者 ListView。

EditText 默认 focusableInTouchMode 为 true,因此我们点击后它才能获取焦点,当我们设置 EditText focusableInTouchMode 为 false 时,点击后获取不到焦点,也就无法输入。

当我们设置 ListView 的 focusableInTouchMode 为 false 时,它的 item 也无法获取不到焦点,这在有的场景下会有用处。

由于设置了这个属性后会引起正常交互不一致的效果,所以官方建议我们保守地使用这个属性,在你确定要用它之前最好三思而后行。

感谢: http://android-developers.blogspot.fi/2008/12/touch-mode.html http://www.cnblogs.com/xiaoweiz/p/3833079.html http://zhidao.baidu.com/link?url=XIgERGPVdEqYduRPs-_IGBiSLI0Gt1ATvsb4gJdVCcblf_qyR2Pxc1ukkLIqtwT4zdlPQ7sO9HjMuxWarkGnt8CuYMTKzw5OVYG4kBXR_Sy http://blog.csdn.net/fancylovejava/article/details/46973397

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏一“技”之长

iOS后台音频播放及锁屏界面显示音频信息 原

后台播放是任何一个音频软件都支持的功能,在上一篇博客中,详细介绍了使用AVAudioPlayer播放音频的方法,这篇博客将对后台的处理做介绍,关于播放与设置音频...

592
来自专栏小白客

一个可以看VIP视频的浏览器插件(电脑版)

● VIP看看是一款浏览器插件,可以让你免费看各大视频网站会员VIP视频,让你的浏览器成为真正VIP浏览器。 ● 支持的浏览器:谷歌浏览器、360浏览器、QQ...

1.3K8
来自专栏开源项目

超实用 Andorid 开发实例 | 码云周刊第 24 期

1. 开源中国 Android 客户端 项目名称:开源中国 Android 客户端 项目简介:这是 OSCHINA 官方开发的 Android 客户端软件,采用...

2564
来自专栏开源项目

Git 项目推荐 | H5活动开源平台

H5营销活动平台采用P3-Weixin插件开发框架,开发微信H5活动,插件以JAR形式存在,支持独立部署,解决H5活动,用户量大,并发高的问题。(提供成熟的分布...

3699
来自专栏何俊林

一个电商项目【拉手团购】购物App(已开源)

图:青岛八大关 之前很多人在后台问,是否有商城或电商项目推荐,今天推荐一款myxh开源的【拉手团购】购物App,基本上涵盖电商项目中所有功能。开源不易,大家多多...

1915
来自专栏FreeBuf

利用qq钓鱼或者定位女友是否回家

前言 随着手机开始普及,现在几乎是人手一部手机,而且qq是必装的app,这正好给了骗子可乘之机,根据你的爱好,给你推送相应的内容,让你防不胜防。 看看下面的聊天...

2735
来自专栏君赏技术博客

关于首页设计框架和一些细节处理分析

开始觉得很简单,毕竟我也是对于 UITableView和 UICollectionView 很溜的码农。

762
来自专栏FreeBuf

Android木马分析简介

本文介绍基于Android的手机恶意软件,是一个基础性的介绍,给新入门的人提供一个分析和工具指引。要分析的木马是一个2013年的syssecApp.apk,这个...

1829
来自专栏phodal

GitHub 更新:更新 timeline & 相似项目推荐

一大早在微信群里,听说 GitHub 更新了,打开电脑一看果然是更新了。首页的动态发生了一些变化: ? 这一下子,能看到的东西比以前更少了。每天要涨那么多 st...

2186
来自专栏SAP最佳业务实践

关于S4信贷错误的系统解决方案

https://wiki.scn.sap.com/wiki/display/ABAPConn/Technical+Setup+and+Reset+of+the+...

1243

扫码关注云+社区