Я в основном исправил проблему с этими строками в dispatchKeyEvent:
byte[] cmdLeft = { (byte) 27, (byte) '[', (byte) 'D' };
byte[] cmdErase = { (byte) 27, (byte) '[', (byte) 'P' };
mSession.appendToEmulator(cmdLeft, 0, cmdLeft.length);
mSession.appendToEmulator(cmdErase, 0, cmdErase.length);
Единственная проблема теперь в том, что если я выберу editText и удалю delete, то один символ будет удален, но два будут отображаться на экране. поэтому, если я напишу enable и удаляю delete, он изменится на enab, но то, что действительно будет отправлено, будет enabl
Я перепробовал dispatchKeyEvent, и это вроде как работает. Если выбран editText, терминал удаляет символы через последовательный порт, поэтому это хороший шаг. Однако основная проблема по-прежнему заключается в том, что, если терминал выбран сам, на экран вместо текстового символа записываются странные маленькие прямоугольники. Хорошо написано, и если я продолжаю нажимать delete, он остается в этом окне, но в следующий раз я набираю количество удалений, которые я нажал, появляется как коробки. Это очень странно...
Он вроде бы просто переопределяется для edittext, а не для терминала.
Странные маленькие коробки во всей их славе:
public boolean dispatchKeyEvent(KeyEvent event) {
if (event != null && event.getAction() == KeyEvent.ACTION_UP) {
return false;
}
if (event.getKeyCode() == KeyEvent.KEYCODE_DEL) {
try {
sendOverSerial("\b".getBytes("UTF-8"));
}
catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return super.dispatchKeyEvent(event);
};
Я подключаюсь к эмулятору терминала, используя библиотеку в android, это подключается к последовательному устройству (коммутатору) и показывает мне отправленные/полученные данные. Я отправляю данные по соединению через текстовое поле под терминалом или, введя сам терминал и нажав кнопку ввода на клавиатуре в обоих случаях. Это будет только когда-либо используемая мягкая клавиатура. Если я отправляю неверную строку, я состою в неустранимом состоянии из-за отсутствия реализации ключа удаления. Backspace в моем editTxt отлично работает, я просто хочу, чтобы он работал, когда терминал выделен, и я пишу в этом.
В настоящий момент, если я нажимаю кнопку "Удалить", появляется символ нечетного поля, и ничего больше не происходит, я получаю исключение в журнале несколько раз (http://i.imgur.com/wMRaLPX.png). Я хочу знать, как мне изменить функциональность клавиш удаления, чтобы при нажатии на нее я могу отправить символ удаления, как это, но также сохранить возможность удалять символы в поле edittext и т.д.:
sendOverSerial("\b".getBytes("UTF-8"))
Это отправляет правильное обратное пространство, мне просто нужно его включить.
Но мягкая клавиатура, похоже, не регистрирует нажатия клавиш? я продолжаю получать код ключа 0, и только ввод будет работать.
В настоящее время я тестирую qaru.site/info/13969/..., но любые другие предложения были бы замечательными, так как до сих пор не было сделано 10 предложений. Мое backspace не будет связано с editText, но с представлением терминала. Я даже не могу обнаружить нажатие клавиши удаления.