Android软键盘没有推高重新选择的视图

时间:2017-03-27 10:52:21

标签: android android-edittext keyboard android-input-method android-textinputedittext

所以,我有一个EditText,当你点击EditText外面时,我有一个隐藏键盘的功能。接下来会发生什么:

  1. 第一次选择EditText时,键盘出现并推动整个View
  2. 我取消选择EditText(点击EditText的任意otuside),键盘进入隐藏状态
  3. 当我再次点击EditText时,键盘出现,但View未上拉,我看不到我的EditText
  4. 如果在选择EditText时再次推送该视图?

    以下是隐藏SoftKeyboard的代码:

     @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        View v = getCurrentFocus();
    
        if (v != null &&
                (ev.getAction() == MotionEvent.ACTION_UP || ev.getAction() == MotionEvent.ACTION_MOVE) &&
                v instanceof EditText &&
                !v.getClass().getName().startsWith("android.webkit.")) {
            int scrcoords[] = new int[2];
            v.getLocationOnScreen(scrcoords);
            float x = ev.getRawX() + v.getLeft() - scrcoords[0];
            float y = ev.getRawY() + v.getTop() - scrcoords[1];
    
            if (x < v.getLeft() || x > v.getRight() || y < v.getTop() || y > v.getBottom())
                hideKeyboard(this);
        }
        return super.dispatchTouchEvent(ev);
    }
    

    hideKeyboard()方法

    public static void hideKeyboard(Activity activity) {
        if (activity != null && activity.getWindow() != null && activity.getWindow().getDecorView() != null) {
            InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(activity.getWindow().getDecorView().getWindowToken(), 0);
    
        }
    }
    

2 个答案:

答案 0 :(得分:2)

使用此方法:

@Override
    public boolean onTouchEvent(MotionEvent event) {
        InputMethodManager imm = (InputMethodManager)getSystemService(Context.
                INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
        return true;
    }

答案 1 :(得分:1)

找到解决方案......

我不得不使用虚拟布局(在我的情况下为LinearLayout):

public static void hideKeyboard(Activity activity) {
    if (activity != null && activity.getWindow() != null && activity.getWindow().getDecorView() != null) {
        InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(activity.getWindow().getDecorView().getWindowToken(), 0);

    }    
activity.findViewById(R.id.dummy).requestFocus();    
}

现在,当我重新选择我的EditText时,它正在工作。