focusSearch(View.FOCUS_RIGHT)在垂直LinearLayout中

时间:2015-08-07 21:44:29

标签: android-layout

我在垂直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();
        }

1 个答案:

答案 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;
    }
}