Я разрабатываю пользовательскую клавиатуру для Android, и я испытываю какое-то странное поведение при смене клавиатуры ... На первом запуске (либо после сборки из Android Studio, либо через Ткань), клавиатура не будет рядом, когда я использую:Android-клавиатура не закрыта
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 вопрос?
см. Мой ответ .... –
Вы каждый раз воссоздаете экземпляр 'InputMethodManager' в вашем методе onKey(). Лучше создать экземпляр класса на вашем 'onCreate()'. –