Android:键盘显示/隐藏多个EditText

时间:2015-02-17 16:18:44

标签: android keyboard

我有一个带有listview的活动,每行都有几个editText。它看起来像一份调查问卷。 我有一个EditText的焦点,然后我点击另一个EditText。此刻,键盘消失并重新出现。这很刺激。

当用户在不想输入活动时点击活动的任何其他位置时,我会使用该代码使键盘失效。但是如果用户点击另一个editText,我希望键盘保持不变。

有人知道键盘是否已经显示,点击EditText时如何保持键盘打开?

@Override
public boolean dispatchTouchEvent(MotionEvent event) {
    View w = getCurrentFocus();
    if (w instanceof EditText) {
        int scrcoords[] = new int[2];
        w.getLocationOnScreen(scrcoords);
        float x = event.getRawX() + w.getLeft() - scrcoords[0];
        float y = event.getRawY() + w.getTop() - scrcoords[1];

        if (event.getAction() == MotionEvent.ACTION_UP && (x < w.getLeft() || x >= w.getRight() || y < w.getTop() || y > w.getBottom()) ) {
            InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(getWindow().getCurrentFocus().getWindowToken(), 0);
        }
    }
    return super.dispatchTouchEvent(event);
}

2 个答案:

答案 0 :(得分:0)

确保您在android:inputType声明中使用XML设置EditText。如果这不能解决问题,您可以使用View类的android:nextFocusUpandroid:nextFocusDownandroid:nextFocusRightandroid:nextFocusLeft来指定下一个焦点下一个EditText移动到。

最后,它可能与ListView处理焦点的方式有关。如果是这种情况,那么可能值得关注的是相关问题here

答案 1 :(得分:0)

如果您可以分享您的代码,将会很有帮助。

我认为发生的事情是,当您点击另一行上的另一个时,您的列表视图会导致您的编辑文字失去焦点。

通常,您可以做的是在编辑文本上注册焦点更改侦听器,然后每次编辑文本失去焦点时,您都​​可以运行一个功能来再次显示键盘。

replyInputEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            showKeyboard(editText);
        }
    });

showkeyboard功能:

public void showKeyboard(EditText field){

    field.setFocusable(true);
    field.setFocusableInTouchMode(true);
    field.requestFocus();
    InputMethodManager imm = (InputMethodManager) activity.getSystemService(activity.getApplicationContext().INPUT_METHOD_SERVICE);
    imm.showSoftInput(field, InputMethodManager.SHOW_IMPLICIT);

}

您还可以在文本字段上注册ontouchup侦听器,然后调用showKeyboard函数。