`
pc519pc
  • 浏览: 11826 次
社区版块
存档分类
最新评论

初步认识view组件焦点切换原理

阅读更多

  这段时间因为自己要实现一套组件焦点切换机制,今天认真研究了一下Android的view组件是如何切换焦点的。Android'view组件的切换的接口是focusSearch(View focused, int direction), 它是通过FocusFinder这个类来实现的,也就是把整个view切换逻辑都搬到了这个类里,这是个好主要,不至于让view过分臃肿(虽然已经很庞大了...)。FocusFinder会首先会通过view的getFocusables(int direction)方法把所有focusable的view收集起来,貌似这个direction没有什么作用,然后通过offsetDescendantRectToMyCoords(View descendant, Rect rect)把这些view组件的坐标转化为同一坐标系上,接着就是判断当前focused组件上下左右4个方向下一组件是谁了。
  Android'view组件很多方法都是交给它的parent来实现,而parent由交给上一级parent, 直到最后的ViewRoot, 比如requestChildFocus(),  clearChildFocus() , requestLayout(), invalidate()方法等,ViewRoot才是对它们真正的实现,也就是方法调用由下而上,而产生的变化由上而下,很有层次感。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics