Android软键盘在方向改变时恢复为默认键盘



我正在构建一个android软键盘,我似乎无法修复这个错误-我有一个阿拉伯语和QWERTY键盘,当我在QWERTY键盘上旋转我的设备时(甚至是阿拉伯语shift),就好像我的程序已经"重新启动",它变成了没有shift的阿拉伯语键盘。

onSaveInstanceState(Bundle savedInstanceState)不工作,因为我的应用程序没有扩展Activity,而是扩展InputMethodService

我在我的android manifest

android:configChanges="keyboard|keyboardHidden|orientation"
android:windowSoftInputMode="stateUnchanged|adjustResize">

我试过使用

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        Log.i(MYDEBUG, "Config Changed " + currentKeyboard.equals(qwerty));
    }

然而,currentKeyboard.equals(qwerty))的结果总是假的,我确定它是真的,就在方向改变之前。

我认为是应用程序的问题。如果应用程序在方向改变时重新启动,那么您的输入连接将被拆除并重建为新的编辑文本。这意味着键盘将把它视为一个新连接,并将以默认状态启动。为了测试这一点,编写一个测试应用程序,在配置更改时关闭重启,看看该应用程序中的键盘是否仍然发生这种情况。

好了,经过一番思考,我意识到问题出在super.onConfigurationChanged(newConfig);

这行代码上当删除

时,我的代码将改变方向,但我的键盘不会调整大小。因为我喜欢父元素的大小调整功能,所以我制作了一个包含所有键盘的数组,在改变方向后,我将更新数组,以便键盘数组具有正确的大小。

@Override
public void onConfigurationChanged(Configuration newConfig) {
    int currentKeyboard = 0;
    boolean isShifted = kv.isShifted();
    for (int i = 0; i < keyboard.length; i++) {
        if(kv.getKeyboard().equals(keyboard[i])){
            currentKeyboard = i;
            break;
        }
    }
    super.onConfigurationChanged(newConfig);
    initializeKeyboardArray();
    setKeyboard(keyboard[currentKeyboard]);
    kv.setShifted(isShifted);
}
private void initializeKeyboardArray(){
    keyboard = new Keyboard[7];
    keyboard[ARABIC] = arabic;
    keyboard[ARABIC_SHIFT] = arabicShift;
    keyboard[ARABIC_SYMBOLS] = arabicSymbols;
    keyboard[ARABIC_SYMBOLS_SHIFT] = arabicSymbolsShift;
    keyboard[QWERTY] = qwerty;
    keyboard[QWERTY_SYMBOLS] = qwertySymbols;
    keyboard[QWERTY_SYMBOLS_SHIFT] = qwertySymbolsShift;
}

不确定这是否是解决问题的迂回方法,或者这是否是正确的方法,所以如果有人知道更好的方法,请告诉我。

相关内容

  • 没有找到相关文章

最新更新