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 条评论
登录 后参与评论

相关文章

来自专栏Nian糕的私人厨房

CSS 字体图标引用

在自己的项目中,我们或多或少的需要插入一些 icon,缺少 UI 设计天赋的我只能去搜寻现有的 icon 了,在这里推荐大家去 Iconfont 阿里巴巴矢量图...

893
来自专栏李蔚蓬的专栏

10.1.5 布局优化利器之 Hierarchy Viewer

无论是哪本讲解布局优化的参考书,它们都不得不提到Hierarchy Viewer。不过,通常情况下,Hierarchy( 英['haɪərɑːkɪ])Viewe...

713
来自专栏前端架构与工程

《微信小程序七日谈》- 第三天:玩转Page组件的生命周期

《微信小程序七日谈》系列文章: 本系列的文章并非初学教程,而是笔者在具体开发过程中遇到的问题以及部分解决方案。 前两篇文章第一天:人生若只如初见和第二天:你可...

21510
来自专栏IT平头哥联盟

曾经面试踩过的坑,都在这里了~

  前段时间面试(包括阿里巴巴的电话面试),遇到过一些面试题,且面试中出现机率较高的提问/笔试,有些答的不是很好挂掉了,今天终于有时间整理出来分享给大家,希望对...

1040
来自专栏lgp20151222

Java引用外部字体(路径引用)的一些坑

然后,一路踩了jvm关于字体的坑,重点是,java的报错很随意,甚至不报错,建议直接看最后面.

1211
来自专栏企鹅号快讯

前端工程师面试题汇总

作者:@markyun markyun.github.io/2015/Front-end-Developer-Questions/ HTML Doctype作用...

2628
来自专栏iOS开发笔记

ios开发照片框架详解(一)-- AssetsLibrary

1 概要 在 iOS 设备中,照片和视频是相当重要的一部分。最近刚好在制作一个自定义的 iOS 图片选择器,顺便整理一下 iOS 中对照片框架的使用方法。在 i...

3639
来自专栏牛客网

百度前端实习岗

1070
来自专栏申龙斌的程序人生

零基础学编程030:像黑客般玩玩字符艺术

经常安装盗版软件的朋友可能会看到一些由字母组成的奇怪图案,比如下面这张图: ? (图片来自于网络) 在Python里,我们无法用字母拼出如此复杂的图案,但也可以...

3616
来自专栏大数据钻研

前端面试那些坑

HTML Doctype作用?严格模式与混杂模式如何区分?它们有何意义? HTML5 为什么只需要写 ? 行内元素有哪些?块级元素有哪些? 空(void)元素有...

3316

扫码关注云+社区