我正在使用Android中的库连接到终端仿真器,它连接到串行设备(交换机)并显示我发送/接收的数据。我通过终端下方的文本框发送数据,或者在两种情况下输入终端本身并敲击键盘上的回车。它只会是一个使用的软键盘。如果我发送不正确的字符串,我处于不可恢复的状态,所以我必须提供删除密钥实现。如何判断editText是否在焦点?
这工作正常,如果我选择终端,我可以删除数据。但是,如果我选择editText,则会出现问题。如果我按删除,则删除一个字符,但终端上显示两个字符。因此,如果我写入“启用”并点击删除,它将在终端屏幕上变为“enab”,但实际发送的内容是“enabl”。因此,我需要做的是找出当EDITTEXT是重点,如果不运行这些线路
mSession.appendToEmulator(cmdLeft, 0, cmdLeft.length);
mSession.appendToEmulator(cmdErase, 0, cmdErase.length);
我已经将这一:http://developer.android.com/reference/android/view/View.OnFocusChangeListener.html
唯一的问题是,如果我改变从editText到终端的重点有时会删除一个字符,我需要它实际上等待删除键被按下。它不会一直发生,但它似乎陷入了某种状态,它总是认为键码被删除,每当我在焦点之间切换时,就会发生删除。我应该在运行之后重置键码吗?为什么它被卡住,认为键码被删除?即使在我按下回车等等。当我在editText中按下delete并且它是空的时,它会发生。如果editText为空,并且终端中有数据,它会正确删除该数据,但会触发此错误。此外,如果editText中没有任何内容,并且终端中没有任何内容,则不会删除任何内容,但会触发错误。所有的
public boolean dispatchKeyEvent(KeyEvent event) {
if (event != null && event.getAction() == KeyEvent.ACTION_UP) {
return false;
}
if(event.getKeyCode() == KeyEvent.KEYCODE_DEL){
mEntry.setOnFocusChangeListener(new OnFocusChangeListener(){
@Override
public void onFocusChange(View v,boolean hasFocus){
if (!hasFocus) {
mSession.appendToEmulator(cmdLeft, 0, cmdLeft.length);
mSession.appendToEmulator(cmdErase, 0, cmdErase.length);
Log.d(TAG, "in inner delete");
}
}
});
Log.d(TAG, "in delete in delete in delete in delete");
try {
sendOverSerial("\b".getBytes("UTF-8"));
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return super.dispatchKeyEvent(event);
};
感谢。我很困惑,我是否已经检查过action_up并返回false。当我选择editText时会删除两个字符,因为我通过串行发送了'\ b',并将它返回到屏幕它将删除一个字符,然后我发送'appendToTerminal'命令,从屏幕上删除另一个字符。如果我实现了你的方法,那么当选择编辑文本时,终端上不会删除任何内容。但它似乎停止了焦点更改时的删除。 – Paul
啊我看到了,你的答案不起作用,因为我已经检测到钥匙是否起作用并返回假。所以,这不是问题,我很害怕:( – Paul
我找不到hasFocus除了当我使用它,就像我现在在听众。 – Paul