我在垂直LinearLayout的xml文件中有2个EditTexts和1个TextView,高度为0dp且权重为1,TextView onClick会触发下面的代码。 我需要把重点放在" next" EditText,但是当最后一个EditText具有焦点时,viewToRight在它假定为null时指向它上面的EditText。如果我删除高度0和重量1,问题就会消失 并给出wrap_content的高度。 如何让viewToRight使用当前的xml获得正确的值。 下面的代码与其他视图安排一起使用,我期望focusSearch(View.FOCUS_RIGHT)到"知道"当在垂直linearLayout中没有右视图时。
View viewCurrent = getCurrentFocus();
View viewToRight = viewCurrent.focusSearch(View.FOCUS_RIGHT);
View viewToDown = viewCurrent.focusSearch(View.FOCUS_DOWN);
if (viewToRight != null && viewToRight instanceof EditText) {
viewToRight.requestFocus();
} else if (viewToDown != null && viewToDown instanceof EditText) {
viewToDown.requestFocus();
}
答案 0 :(得分:0)
我必须编写一个代码来检查父视图组,并确定要检查其下一个视图的方向。
@Nullable
public View getForwardEditText(View currentView) {
View viewNext = null;
assert currentView != null;
View parent = (View) currentView.getParent();
if (parent instanceof LinearLayout) {
int i = ((LinearLayout) parent).getOrientation();
if (i == 1) { //vertical
viewNext = currentView.focusSearch(View.FOCUS_DOWN);
} else { //must be horizontal
viewNext = currentView.focusSearch(View.FOCUS_RIGHT);
}
} else if (parent instanceof RelativeLayout) {
if (currentView.focusSearch(View.FOCUS_DOWN) != null) {
viewNext = currentView.focusSearch(View.FOCUS_DOWN);
} else if (currentView.focusSearch(View.FOCUS_RIGHT) != null) {
viewNext = currentView.focusSearch(View.FOCUS_RIGHT);
}
}
if (viewNext instanceof EditText) {
return viewNext;
} else {
return null;
}
}