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

时间:2011-01-24 05:43:06

标签: java android android-edittext

例如,将一个退格键发送到编辑文本控件以删除一个字符或发送一个字符代码(如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.
}

10 个答案:

答案 0 :(得分:17)

要发送模拟退格键,请按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));

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

答案 1 :(得分:7)

您的问题并不是那么明确,但我认为您希望在按下某些按钮时修改/追加文本到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);
    }
}

对于您处理的每个案例(如上所述)是返回true还是在super.onKeyDown(keyCode, event);语句后始终返回switch取决于您的具体要求。查看文档以了解onKeyDown

的行为

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

答案 2 :(得分:2)

我认为您需要addTextChangedListener使用EditText 请参阅EditText input with pattern androidLive editing of users input

的回答

答案 3 :(得分:2)

virsir,我想你正在寻找以编程方式发送硬键。

为此,您可以使用dispatch (KeyEvent.Callback receiver, KeyEvent.DispatcherState state, Object target)

上的示例尝试Back and other hard keys: three stories

希望有所帮助。

答案 4 :(得分:1)

检查活动中的关键事件。例如,此代码侦听back keypress:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
    if ((keyCode == KeyEvent.KEYCODE_BACK))
    {
    finish();
    }
    return super.onKeyDown(keyCode, event);
}

答案 5 :(得分:1)

尝试实现TextWatcher接口。

它有3种方法需要覆盖。

public void afterTextChanged(Editable s) {

    Log.v("afterTextChanged","here");
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    Log.v("beforeTextChanged","here");
}

public void onTextChanged(CharSequence s, int start, int before, int count) {
}

我认为这会奏效。

答案 6 :(得分:1)

只需使用setText方法即可。如果你想模拟退格,你可以做这样的事情。

String curText = mEditText.getText();
if(!curText.equals("")){
    mEditText.setText(curText.subString(0, curText.length - 1));
}

答案 7 :(得分:1)

如果你想要一个点击监听器,最好的方法是:

View textfield = findViewById(R.id.textfield);  
textfield .setOnClickListener(new View.OnClickListener() { 
public void onClick(View v) {  
/*your code for the click event here*/ }});

如果您需要退格按钮,请执行以下操作:

public void backSpace() {   
EditText textfield = (EditText)findViewById(R.id.textfield);  
    try {  
        textfield.getText().delete(textfield.getSelectionEnd() - 1, textfield.getSelectionStart());  
    } catch (Exception e) {  
        try {  
            textfield.getText().delete(textfield.length() - 1, textfield.length());  
        } catch (Exception myException) {  
        //textfield.getText().delete(textfield.length(), textfield.length() - 1);  
        }  
    }  
}

如果你想在EditText中追加一个字符,请执行以下操作:

EditText textfield = (EditText)findViewById(R.id.textfield);  
textfield.setText(textfield.getText().concat("112"));

答案 8 :(得分:1)

模拟退格键,只需广告代码

editText.setText(editText.getText().substring(0,editText.getText().length()-1))
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);

模拟添加字符,放入代码

editText.setText(editText.getText() + (char) charCode)

getWindow()setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);

答案 9 :(得分:1)

看一下这篇文章:creating-input-method.html。基本上,您可以手动发送KeyEvents,也可以在应用程序edit and commit text around the cursor中手动Input View。这些都是通过您的IME InputConnection完成的。

希望这有帮助,