在EditText中拦截空格键的问题

时间:2012-07-02 23:21:52

标签: android android-edittext

我正试图让用户从EditText向TextView输入文本。但是,如果用户输入内容并想要修复它,我希望他们能够在空的EditText上按空格来获取他们写回的最后一件事。第一个问题是,如果他们输入“hello”,按回车键将其添加到TextView(从EditText中清除它),然后点击空格,然后EditText就会出现“hello”。不是我想要的,我无法弄清楚原因。

我将输入的文本放入保留字符串的代码:

b1 = ti.getText().toString();

然后,如果用户点击空格键,我相信他们应该在EditText中获得b1。相反,我得到:" " + b1。为什么会增加空间呢?

if((event.getAction()==KeyEvent.ACTION_DOWN)&&(key == KeyEvent.KEYCODE_SPACE)){

    if(ti.getText().toString().equals("")){
    ti.setText(b1);
}

我的第二个更大的问题是上面的代码只适用于硬件键盘。软键盘压缩空间的关键事件是什么?

这都在onKeyListener中。

2 个答案:

答案 0 :(得分:1)

对于你的第一个问题,我怀疑你需要在满足'if'条件时从onKeyListener中的onKey方法返回true,以指示事件被消耗,否则你得到默认的onKeyListener将空间添加到EditText 。即:

if((event.getAction()==KeyEvent.ACTION_DOWN)&&(key == KeyEvent.KEYCODE_SPACE)){

   if(ti.getText().toString().equals("")){
      ti.setText(b1);
      return true;
   }
}

KeyEvent API文档中的这个摘录应该有助于解决问题2: “由于软输入方法可以使用多种创造性的输入文本方式,因此无法保证软键盘上的任何按键都会产生关键事件:这由IME自行决定,实际上不鼓励发送此类事件。您永远不应该依赖于接收软输入法上任何键的KeyEvent。特别是,默认软件键盘永远不会向任何针对Jelly Bean或更高版本的应用程序发送任何键事件,并且只会发送一些按下删除键的事件。将键返回到目标为Ice Cream Sandwich或更早版本的应用程序。请注意,无论版本如何,其他软件输入方法都可能永远不会发送关键事件。如果您需要与软件键盘进行特定交互,请考虑使用编辑器操作,如IME_ACTION_DONE,因为它提供了更多的可见性用户关于应用程序如何对按键操作做出反应。“

答案 1 :(得分:1)

解决额外空间问题的一种简单方法是在将字符串放入EditText之前从String中删除空格

b1 = b1.substring(1); //<--- cut out the first character, which is the " " in your case.
ti.setText(b1);

P.S。我强烈建议使用更多描述性变量名称。如果你使用像ti和b1这样的名字,你的程序可能会混淆。也许这些选择在您的计划环境中更有意义。但是从你在这里展示的内容来看,这些名称所指的并不容易。