平常做手机开发的时候不太需要关心焦点获取,但是如果做Android Tv或盒子开发的时候就要做好View之间焦点切换了。
View焦点流程图
viewfocus.jpeg
源码分析
view通过以下几个方法来获取焦点
View.java -> requestFocus(int direction, Rect previouslyFocusedRect)
public final boolean requestFocus() {
return requestFocus(View.FOCUS_DOWN);
}
public final boolean requestFocus(int direction) {
return requestFocus(direction, null);
}
public boolean requestFocus(int direction, Rect previouslyFocusedRect) {
return requestFocusNoSearch(direction, previouslyFocusedRect);
}
从代码中可以看到最终都会调到requestFocusNoSearch方法
view.java -> requestFocusNoSearch(int direction, Rect previouslyFocusedRect)
private boolean requestFocusNoSearch(int direction, Rect previouslyFocusedRect)