私は、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 を選択して [削除] をクリックすると、1 文字が削除されますが、2 文字が画面に表示されることです。したがって、enable と書いて delete を押すと、enab に変わりますが、実際に送信されるのは enabl です。
私はdispatchKeyEventをオーバーライドしましたが、うまくいきました。editText が選択されている場合、端末はシリアル経由で文字を削除するので、これは適切な手順です。ただし、端末自体が選択されている場合、文字を削除する代わりに奇妙な小さなボックスが画面に書き込まれるという主な問題は依然として存在します。1 つが書かれていて、削除を押し続けるとその 1 つのボックスにとどまりますが、次に入力すると、押した削除の量がボックスとして表示されます。それは非常に奇妙です...
端末ではなく、編集テキストに対してオーバーライドされているようです。
すべての栄光の奇妙な小さな箱:
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 のライブラリを使用して端末エミュレータに接続しています。これはシリアル デバイス (スイッチ) に接続し、送受信されたデータを表示します。どちらの場合も、ターミナルの下のテキスト ボックスを介して接続を介してデータを送信するか、ターミナル自体に入力してキーボードの Enter キーを押します。使用されるのはソフトキーボードだけです。間違った文字列を送信すると、削除キーが実装されていないため、回復不能な状態になります。editTxt のバックスペースは正常に機能します。端末が強調表示されているときに機能させたいだけで、その中に書き込みます。
現時点では、削除を押すと、少し奇妙なボックス文字が表示され、他に何も起こらず、ログに例外が発生することがあります ( http://i.imgur.com/wMRaLPX.png )。私が知りたいのは、削除キーの機能を変更して、それを押したときにこのような削除文字を送信できるようにするだけでなく、編集テキストボックスなどで文字を削除する機能を保持する方法です:
sendOverSerial("\b".getBytes("UTF-8"))
これは正しいバック スペースを送信します。組み込む必要があるだけです。
しかし、ソフトキーボードはキーの押下を登録していないようですか? 0 のキーコードを取得し続け、Enter のみが機能します。
私は現在https://stackoverflow.com/questions/4...62035_11377462を試していますが、これまでのところ約10の提案が機能していないため、他の提案は素晴らしいでしょう。私のバックスペースは editText ではなく、端末ビューに関連付けられます。削除キーが押されていることさえ検出できません。