Non-Touch Mode 就是指键盘出来了,这种状态是非Touch Mode模式


没有键盘的其他所有的操作应该都属于 Touch Mode,比如:点击,拖动,手势滑动,滚动,等等,


大多数Android设备都是触摸屏的,但是实际上Android设备也支持键盘操作,允许通过键盘来完成导航,点击,输入等。

当用户通过键盘(或者轨迹球)操作的时候,有必要聚焦当前接受输入的UI元素,例如,高亮(聚焦)某个按钮,让用户知道当前正在操作的UI元素是哪个。

但是,当用户使用触摸屏与设备交互的时候,始终聚焦当前UI元素就没有必要了,而且很丑陋;用户点击哪个元素,哪个元素就是当前元素,无需高亮标识。并且,通过触摸屏与设备交互的时候,点击某个UI元素也不会导致该元素聚焦,此时的高亮效果是由Pressed状态来完成的。也就是说,在Touch Mode模式之下,UI元素是不会进入聚焦状态的,即使调用requestFocus也不会。

那个,Android是如何区分这两种情况的呢?

答案就是Touch Mode。当用户开始通过键盘与设备交互的时候,设备就退出Touch Mode模式;当用户开始通过触摸屏与设备交互的时候,设备就进入Touch Mode模式。可以通过调用View的isInTouchMode来判断设备当前是否处于Touch Mode模式。

但是,也有例外情况。有些UI元素,即使是在Touch Mode的状态之下,也需要获得焦点,典型的就是Edittext。那么,这种情况该如何处理呢?

答案就是做特殊处理。Android规定,某些元素,即使是在Touch Mode模式下,也可以获得焦点。调用View的setFocusableInTouchMode(true)可以使View在Touch Mode模式之下仍然可获得焦点(像Edittext就是在内部设置了这个属性),调用isFocusableInTouchMode可以判断View是否可在Touch Mode模式下聚焦。


更多相关文章

  1. No.11 使用firewall配置的防火墙策略的生效模式
  2. 谷歌Android碎片化严重:Android4.0份额仅为11%
  3. 在Nexus上实现Ubuntu和Android(安卓)4.4.2 双启动
  4. Android(安卓)开发艺术探索之三 -- View 的事件体系
  5. 当Android遇上设计模式之建造者(Builder)模式
  6. HTML5 VIDEO
  7. Android深入研究Adapter重绘
  8. Android中RxJava+Retrofit+MVP模式的整合(1)—目录设计
  9. android Task(任务)的简单理解

随机推荐

  1. MySQL 线上日志库迁移实例
  2. MySQL 线上数据库清理数据的方法
  3. mysql创建表添加字段注释的实现方法
  4. MySQL 大表的count()优化实现
  5. MySQL source命令的使用简介
  6. MySQL too many connections错误的原因及
  7. 浅谈MySQL如何优雅的做大表删除
  8. MySQL中冗余和重复索引的区别说明
  9. MySQL查询冗余索引和未使用过的索引操作
  10. Mysql将查询结果集转换为JSON数据的实例