天天记录 - Android焦点相关知识学习
来源:互联网 发布:软件测试校园招聘 编辑:程序博客网 时间:2024/05/22 12:15
focus 是使用物理按键的情况描述,例如使用向下键选中一个view,这个view就是focused
* Button 获取焦点:
button.setFocusable(true);
button.setFocusableInTouchMode(true);
button.requestFocus();
button.setFocusableInTouchMode(true);
button.requestFocus();
二、 Android Focus 相关源码分析
焦点改变最终都会调用View.requestFocus()以下是对其源码简单分析
1. 以下情况都不符合focus情况
focusable - false
visibility - false
Touch - false
向上循环所有的ViewGroup - 是否阻拦
2. 处理focus请求
2.1 在当前view下执行mParent下面方法
View - mParent .requestChildFocus (this, this);
ViewGroup - mParent.requestChildFocus( viewGroup, currentView);
向上一级级遍历,所有视图unFocus(清理上一个获取foucs的view执行unFocus)到mParent为空时结束
View - mParent .requestChildFocus (this, this);
ViewGroup - mParent.requestChildFocus( viewGroup, currentView);
向上一级级遍历,所有视图unFocus(清理上一个获取foucs的view执行unFocus)到mParent为空时结束
unFocus() 中调用onFocusChanged
2.2 调用onFocusChanged回调方法
2.3 refreshDrawableState 进行绘制工作,以后再具体分析
三、焦点相关方法:
setFocusable(boolean)
setFlags()
findFocus
forceLayout
focusSearch
ViewParent.focusSearch
hasFocus
hasFocusable
addFocusables
//想设置ViewGroup里各View的焦点顺序特性,可用
//layout.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);根据参数有不同特性
ViewGroup.focusableViewAvailable
onFocusChanged() 判断状态
配置文件中:android:focusable="false"
setFocusableInTouchMode()
requestFocusFromTouch()
setFlags()
findFocus
forceLayout
focusSearch
ViewParent.focusSearch
hasFocus
hasFocusable
addFocusables
//想设置ViewGroup里各View的焦点顺序特性,可用
//layout.setDescendantFocusability(ViewGroup.FOCUS_AFTER_DESCENDANTS);根据参数有不同特性
ViewGroup.focusableViewAvailable
onFocusChanged() 判断状态
配置文件中:android:focusable="false"
setFocusableInTouchMode()
requestFocusFromTouch()
四、 疑问
1. View.mParent变量应该记录的是当前view的父节点? 什么时候,怎样初始化的?
2. hasAncestorThatBlocksDescendantFocus
vgAncestor.getDescendantFocusability() == ViewGroup.FOCUS_BLOCK_DESCENDANTS
此方法中的这个开关,在什么地方设置的?
3. handleFocusGainInternal
( mPrivateFlags & FOCUSED ) == 0
判断的含义?
4. focus全局应该只有一个吧,清理一个不就行了,为什么还依次向上遍历?
5. view的fouces状态记录在什么地方,如何知道当前有哪一个是focus的???
6. ViewGroup即使设置focus监听也不会执行,除非调用requestFoucs,执行ViewGroup.requestFocus
7. 焦点切换
1. View.mParent变量应该记录的是当前view的父节点? 什么时候,怎样初始化的?
2. hasAncestorThatBlocksDescendantFocus
vgAncestor.getDescendantFocusability() == ViewGroup.FOCUS_BLOCK_DESCENDANTS
此方法中的这个开关,在什么地方设置的?
3. handleFocusGainInternal
( mPrivateFlags & FOCUSED ) == 0
判断的含义?
4. focus全局应该只有一个吧,清理一个不就行了,为什么还依次向上遍历?
5. view的fouces状态记录在什么地方,如何知道当前有哪一个是focus的???
6. ViewGroup即使设置focus监听也不会执行,除非调用requestFoucs,执行ViewGroup.requestFocus
7. 焦点切换
资料:
初步认识view组件焦点切换原理
android 布局文件中 view 焦点获取浅析
自己控制焦点的移动
让ViewGroup中的子View获得焦点
android焦点问题
通过配置文件,自己控制前后左右下一个焦点view是哪个
- 天天记录 - Android焦点相关知识学习
- Android 相关知识 EditText焦点相关问题
- 天天记录 - Android Touch事件学习 - 修改MotionEvent的值
- 天天记录 - Android invalidate学习使用的例子
- 天天记录 - Android View中的开关学习即位运算
- IOS开发学习记录----计算机相关知识
- PHPWeb开发相关知识学习记录
- Android VPN 相关知识学习
- Android VPN 相关知识学习
- 天天记录 - Android AsyncTask 缺陷
- 天天记录 - Android PopupWindow例子
- Android ADB学习--相关记录
- DB2 相关知识记录
- openwrt 相关知识记录
- JS相关知识记录
- Caffe相关知识记录
- Android 屏幕相关知识——Android群英会浏览记录
- Android学习日记-schema相关知识
- MyEclipse8.5搭建ssh2框架
- python出现Non-ASCII character '\xe7' in file ex6.py on line 1, but no encoding declare错误
- S3C2440之UART操作(FIFO中断模式)
- Bof Eof
- 实战Concurrent
- 天天记录 - Android焦点相关知识学习
- android framework 触摸屏事件传递
- Java 反射与代理技术及应用解读
- 创业俱乐部:为创业者指点迷津
- CodeForces 216D Spider's Web
- Android之ActivityGroup实现Tab功能
- jQuery基础教程之强大的选择器(基本选择器)
- hdu 4292(拆点的网络流)
- 快速幂取模