Android显示视图并同时隐藏键盘。奇怪的行为

时间:2016-05-10 13:46:53

标签: android keyboard

我有一个自定义视图,可以在同一个空间中显示应该是android的软键盘原生视图。

我需要打开键盘,单击按钮,隐藏键盘并在键盘所在的同一位置显示其他视图。

我现在只使用隐藏键盘并显示自定义视图,但有一个奇怪的行为和最小滞后和重叠。

有人实施了类似的东西吗?

3 个答案:

答案 0 :(得分:3)

我已经检查了Github项目并发现了错误,我已使用以下代码修复了该错误:

if (isRedPanelVisible()) {
    showRedPanel(false);
    showKeyboard(true, new KeyboardCallback() {
        @Override
        public void onKeyboardDone(boolean isVisible) {

        }
    });
}
if (KeyboardVisibilityEvent.isKeyboardVisible(TestActivity.this)) {
    hideKeyboard(TestActivity.this);
    new android.os.Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            showRedPanel(true);
        }
    }, 100);

注意:您只需将其放在按钮的单击事件下的TestActivity.java中,然后删除以前的代码。

  

我做了什么

如果 readPanel可见,则我将showRedPanel调到false并尝试打开键盘。

之后我添加了对键盘可见性事件的检查,如果键盘可见,我调用了hideKeyboard以使键盘消失,并在showReadPanel后调用true延迟 100 ms

  

代码:hideKeyboard

public void hideKeyboard(Activity activity) {
        // Check if no view has focus:
        try {
            View view = activity.getCurrentFocus();
            if (view != null) {
                InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
                inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
            }
        } catch (Exception e) {

        }
    }

答案 1 :(得分:3)

所以代码中发生的是: 告诉系统关闭键盘 - > 显示红色面板,延迟时间 - > 键盘关闭前显示红色面板 - > 由于键盘模式位于adjustResize键盘上方显示的红色面板 - > 键盘已关闭 - > 一切就绪

尝试将清单中的windowSoftInputModeadjustResize更改为adjustNothing

可悲的是,android中的键盘并不像IOS那样顺畅,键盘由OS处理意味着你无法控制它的大小,打开/关闭动画而没有回调!因此,最好的方法是始终显示红色面板,并在需要时在顶部上打开键盘。

答案 2 :(得分:-2)

使用以下功能显示/隐藏键盘:

/**
 * Hides the soft keyboard
 */
public void hideSoftKeyboard() {
    if(getCurrentFocus()!=null) {
        InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
        inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
    }
}

/**
 * Shows the soft keyboard
 */
public void showSoftKeyboard(View view) {
    InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
    view.requestFocus();
    inputMethodManager.showSoftInput(view, 0);
}