private View FindFocusView(View root, View current, FocusDirection direction) { int index = root.IndexOf(current); Debug.Assert(index != -1); if (direction == FocusDirection.Down || direction == FocusDirection.Right) { for (int i = index + 1; i < root.ChildCount(); ++i) { View child = root.ViewAt(i); View view = FindFocusView(child, direction); if (view != null) { return view; } } } else if (direction == FocusDirection.Up || direction == FocusDirection.Left) { for (int i = index - 1; i >= 0; --i) { View child = root.ViewAt(i); View view = FindFocusView(child, direction); if (view != null) { return view; } } } View parent = root.Parent(); if (parent != null) { return FindFocusView(parent, root, direction); } return null; }
private View FindFocusView(View root, FocusDirection direction) { if (direction == FocusDirection.Down || direction == FocusDirection.Right) { for (int i = 0; i < root.ChildCount(); ++i) { View child = root.ViewAt(i); View view = FindFocusView(child, direction); if (view != null) { return view; } if (child.CanFocus()) { return child; } } } else if (direction == FocusDirection.Up || direction == FocusDirection.Left) { for (int i = root.ChildCount() - 1; i >= 0; --i) { View child = root.ViewAt(i); View view = FindFocusView(child, direction); if (view != null) { return view; } if (child.CanFocus()) { return child; } } } return root.focusable ? root : null; }