Android 键盘无法关闭

标签 android ime

我一直在为 Android 开发自定义键盘,但在更换键盘时遇到了一些奇怪的行为... 在第一次运行时(无论是从 Android Studio 构建还是通过 Fabric 分发),当我使用时,键盘不会关闭:

InputMethodManager imeManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
imeManager.switchToNextInputMethod(getToken(), false /* onlyCurrentIme */);

它将在我的键盘后面打开下一个输入法...但是我的键盘将被强制放在另一个键盘的顶部...如果您转到主屏幕,它甚至会留在那里...但是作为设备重新启动后,键盘会毫无问题地改变......我一直在阅读这方面的内容,我发现以前版本的 Android 中的键盘存在一些问题,现在还有吗?

下面可以看到相关代码:

public class CustomKeyboard extends InputMethodService implements KeyboardView.OnKeyboardActionListener {

    private KeyboardView kv;
    private Keyboard keyboard;

    public final static int CodeRowFourGlobe = 55041;

    @Override
    public View onCreateInputView() {
        kv = (KeyboardView)getLayoutInflater().inflate(R.layout.keyboard, null);
        keyboard = new Keyboard(this, R.xml.custom_keyboard);
        kv.setPreviewEnabled(false);
        kv.setKeyboard(keyboard);
        kv.setOnKeyboardActionListener(this);
        return kv;
    }

    private IBinder getToken() {
        final Dialog dialog = getWindow();
        if (dialog == null) {
            return null;
        }
        final Window window = dialog.getWindow();
        if (window == null) {
            return null;
        }
        return window.getAttributes().token;
    }

    @Override
    public void onPress(int primaryCode) {

    }

    @Override
    public void onRelease(int primaryCode) {

    }

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    @Override
    public void onKey(int primaryCode, int[] keyCodes) {
        InputConnection ic = getCurrentInputConnection();

        if (primaryCode == Keyboard.KEYCODE_DELETE) {
            ic.deleteSurroundingText(1, 0);
        } else if (primaryCode == CodeRowFourGlobe) {
            InputMethodManager imeManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
            imeManager.switchToNextInputMethod(getToken(), false /* onlyCurrentIme */);
        } else {
            /* not relevant */
        }
    }

    @Override
    public void onText(CharSequence text) {

    }

    @Override
    public void swipeLeft() {

    }

    @Override
    public void swipeRight() {

    }

    @Override
    public void swipeDown() {

    }

    @Override
    public void swipeUp() {

    }
}

您是否知道这是我更改键盘的方式的问题还是已知的 Android 问题?

最佳答案

随时试试这个对我有用

public static void hideKeyboard( Context context ) {

try {
InputMethodManager inputManager = ( InputMethodManager ) context.getSystemService( Context.INPUT_METHOD_SERVICE );

View view = ( (Activity) context ).getCurrentFocus();
if ( view != null ) {
inputManager.hideSoftInputFromWindow( view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS );
}
} catch ( Exception e ) {
e.printStackTrace();
}


}

关于Android 键盘无法关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33998573/

相关文章:

Android EditText 不起作用,android :imeOptions ="actionNext" android:inputType ="phone"

sdl-2 - 无法在 SDL2 创建的窗口上打开输入法

Android:如何检查服务是否正在运行?

c# - 系统.TypeLoadException : Could not resolve type with token 01000019

java - 通过 Jsoup 更新效果不佳

android - 向 ListView 添加动画以展开/折叠内容

java - 如何在不四舍五入的情况下显示最多 2 位小数?

android - 如何在 Android 上创建多个 IME(输入法编辑器)子类型?

android - 如何更改 KeyboardView 的充气机