我正在构建一个Android软键盘,我似乎无法解决这个问题 - 我有一个阿拉伯语和QWERTY键盘,当我在QWERTY键盘上旋转设备(甚至阿拉伯语移位)时,好像我的程序已重新启动"它变成了阿拉伯键盘而没有移位。
onSaveInstanceState(Bundle savedInstanceState)
不起作用,因为我的应用不会延伸Activity
而是InputMethodService
。
我将以下内容放入我的Android清单
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))
总是导致错误,我确保在方向更改之前确实如此。
非常感谢任何帮助。
答案 0 :(得分:0)
我认为应用程序出错了。如果应用程序在方向更改时重新启动,则您的输入连接将被拆除并重建为新的编辑文本。这意味着键盘会将其视为新连接,并将以默认状态启动。要测试这一点,请编写一个测试应用程序,关闭配置更改时的重新启动,并查看该应用程序中的键盘是否仍然会发生。
答案 1 :(得分:-1)
好吧,经过一番令人难以置信的思考后,我意识到问题出在代码行cmd + R
删除后,我的代码会更改方向,但我的键盘不会调整大小。由于我喜欢父级的重新调整大小功能,我创建了一个包含所有键盘的数组,在更改方向后,我会更新数组,以便键盘阵列具有正确的大小。
super.onConfigurationChanged(newConfig);
不确定这是否是解决问题的迂回方式,或者这是否正确,如果有人知道更好的方式 - 请告诉我。