如何将关键事件发送到编辑文本

2022-09-05 00:05:11

例如,向 edit 文本控件发送退格键以删除字符,或发送字符代码(如 112)以编程方式在 edittext 控件中追加字符。

实际上,我需要一个像这样的方法

void onKeyReceived(int keyCode)
{
  // here I would like to append the keyCode to EditText, I know how to add a visible character, but what about some special keys, like arrow key, backspace key.
}

答案 1

要将模拟的退格键按下发送到 EditText,您必须同时发送按键和释放事件。喜欢这个:

mEditText.dispatchKeyEvent(new KeyEvent(0, 0, KeyEvent.ACTION_DOWN,
    KeyEvent.KEYCODE_DEL, 0));
mEditText.dispatchKeyEvent(new KeyEvent(0, 0, KeyEvent.ACTION_UP,
    KeyEvent.KEYCODE_DEL, 0));

这可用于发送任何其他密钥代码,而不仅仅是删除。


答案 2

您的问题并不是那么清楚,但我认为您希望在按下某些按钮时修改/将文本附加到a。如果是这样,您需要一些现有答案的组合。TextView

@Override
public void onCreate(Bundle savedInstanceState) {
    ...
    (TextView) textView = (TextView) findViewById(R.id.myTextView);
}

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
    switch(keyCode) {
    case KeyEvent.KEYCODE_BACK:
        // user pressed the "BACK" key.  Append "_back" to the text
        textView.append("_back");
        return true;
    case KeyEvent.KEYCODE_DEL:
        // user pressed the "BACKSPACE" key.  Append "_del" to the text
        textView.append("_del");
        return true;
    default:
        return super.onKeyDown(keyCode, event);
    }
}

是为您处理的每个案件(如上所述)退货,还是始终在对账单后退货,将取决于您的确切要求。查看文档以了解 onKeyDown 的行为truesuper.onKeyDown(keyCode, event);switch

如果不想在每种情况下都追加文本,而是要删除字符或移动光标,则可以在每个语句中执行此操作。查看 TextView 文档,了解您可以调用的不同方法。另请查看 KeyEvent 文档,了解可以检查的密钥列表。case


推荐