由于要做日历开发渐进教程(5),而(5)中要完成一个功能:点击任意一天时,高亮显示目标日期

这个功能显然需要用到focus实现,然后就去查。有focusable和focusableInTouchMode,现在搞明白了一些,写下自己的理解,希望你能帮助大家吧。

通过搜索,在stackoverFlow上找到了两个答案,基本解决了我的疑惑。

http://stackoverflow.com/questions/24155956/difference-between-focusable-and-focusableintouchmode

http://stackoverflow.com/questions/23799064/what-is-the-difference-between-setfocusable-and-setfocusableintouchmode

关于焦点是什么的问题?

类似非触屏手机时代,需要使用键盘的上下左右去选中某个应用,然后点击确定执行。而触屏手机,我们只需要对应用点击一次,即可,无需焦点。也就是会所焦点是为了标记你目前选中的位置的。而这个在日历中却是有用的。

android:focusable与android:focusableInTouchMode

前者针对在键盘下操作的情况,如果设置为true,则键盘上下左右选中,焦点会随之移动。

而后者,显然是针对触屏情况下的,也就是我们点击屏幕的上的某个控件时,不要立即执行相应的点击逻辑,而是先显示焦点(即控件被选中),再点击才执行逻辑。

android:focusable=“true”不会改变android:focusableInTouchMode,因此只在键盘状态下显示焦点,在TouchMode状态下,依旧无法显示焦点。

android:focusable=“false”,一定会使android:focusableInTouchMode=“false”。

相对的

android:focusableInTouchMode=“false”,不会影响android:focusable。

android:focusableInTouchMode=”true”,一定会是android:focusable=“true”

 

说来说去有点绕。

但请记住一点,就是对于现在触屏时代的手机而言,如果要获取焦点,我们只需要设置

android:foucusableInTouchMode=“true”就可以了。

 

所有的获取焦点,都要有一个前提,那就是该控件必须设置android:clickable=”true”,如果都点击不了,设置焦点应该没什么意义了吧。


在后续的日历开发中有对focusableInTouchMode的应用,大家可以看到。

更多相关文章

  1. 理解 ViewStub 原理
  2. 关于Android软键盘弹出的问题
  3. EditText控件设置只读,动态控制EditText状态
  4. 利用ActivityInstrumentationTestCase2测试Activity
  5. Android(安卓)app——常见控件的使用方法
  6. android使用ExpandableListView控件实现小说目录效果的例子
  7. 调用Android中的软键盘
  8. 玩Android项目开发6-----体系页面(SearchView查询功能)
  9. View的事件分发机制解析

随机推荐

  1. mysql 5.7.18 Archive压缩版安装教程
  2. mysql 5.7 zip archive版本安装教程
  3. mysql installer web community 5.7.21.0
  4. mysql 8.0.11 MSI版安装配置图文教程
  5. Windows10下mysql 8.0.12 解压版安装图文
  6. mysql server 5.7.20 安装配置方法图文教
  7. 如何安装MySQL Community Server 5.6.39
  8. mysql中影响数据库性能的因素讲解
  9. MySQL 数据备份与还原的示例代码
  10. mysql5.7.20第一次登录失败的快速解决方