专栏首页风吹杨柳实习杂记(27):android的touch Mode

实习杂记(27):android的touch Mode

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模式下聚焦。

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • java学习------------java集合学习之List

    wust小吴
  • 实习入职第五天:参数中的可变参数等小知识点

    Returns the position of the enum constant in the declaration. The first constant...

    wust小吴
  • json字符串解析问题---有网和无网的情况下都要给用户友好的体验问题

    最近遇到这样的问题,就是加了  网络检查  但是如果当前的app在运行的时候没有退出,同时这个时候断网了,如果再请求,我忘记了再次去检查网络,如果加了网络检查就...

    wust小吴
  • DarkMode(1):产品应用深色模式分析

    2018 年的 macOS Mojave 率先支持了深色外观,紧接着 Windows 10 在 2018 年的 10 月份大版本更新中,也引入了 Dark Mo...

    周陆军
  • 13年5月 软考笔记整理

    虚拟存储器为了给用户提供更大的随机存储空间而采用的一种存储技术。它将内存(主存)与外存(辅存)结合使用,好像有一个容量巨大的内存储器,工作速度接近于主存,每位成...

    week
  • C语言 | 每日基础(25)

    读者:用预定义宏 #define Nullptr(type) (type *)0 帮助创建正确类型 的空指针。

    小林C语言
  • linux环境下安装tomcat并配置tomcat日志分割

    ./configure  如果此步骤报错则根据提示对应解决,一般情况下是系统没有安装gcc

    Jack Chen
  • 利用tcp_wrapper实现SSH登录的IP访问控制

    tcp_wrapper是一个工作在传输层、对于进出本机访问某特定服务的连接基于规则进行检查的一个访问控制工具,tcp wrapper只能对基于tcp协议的服务作...

    yuanfan2012
  • InPanel Linux 服务器管理面板

    安装完成后请设置管理员用户名和密码,如果直接回车,则使用默认的用户名 admin 和密码 admin 。 设置完后,打开给定的链接地址即可访问您的 InPan...

    Inkedus
  • 在nodejs中创建child process

    nodejs的main event loop是单线程的,nodejs本身也维护着Worker Pool用来处理一些耗时的操作,我们还可以通过使用nodejs提供...

    程序那些事

扫码关注云+社区

领取腾讯云代金券