问题的EditText拦截空格键(Problems intercepting space key i

2019-09-19 00:16发布

我试图使一个用户输入文本从一个EditText一个TextView的方式。 但是,如果用户输入什么,要解决这个问题,我希望他们能够在一个空的EditText按空间来获得他们回信的最后一件事。 第一个问题是,如果他们输入“你好”,按下回车键将其添加到TextView的(这将清除它从EditText上),然后打的空间,然后的EditText有“你好”。 不是我想要的,我想不通为什么。

我的代码放置输入的文本到保持字符串:

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。

Answer 1:

一个简单的方法解决了额外的空间,问题是你把它放到EditText上之前刚刚从字符串中删除的空间

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

PS我强烈建议更具描述性的变量名。 你的项目很可能会造成混乱,如果你使用像TI和B1的名字上下工夫。 也许这些选择使你的程序的情况下更有意义。 但是从你这里显示它是什么并不容易分辨什么这些名称指代。



Answer 2:

因为我怀疑你的第一个问题,你需要你的时候“如果”条件满足的onKeyListener从安其方法返回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:“作为软输入法都可以使用输入文本的多重性和创造性的方式,也不能保证一个软键盘上的任意按键会产生一个按键事件:这是留给输入法的决定,并在事实上发送此类事件气馁。你永远不应该依赖于接收的KeyEvents对软输入法的任意键。特别是,默认的软件键盘将永远不会发送任何关键事件的任何应用程序靶向果冻豆或更高版本,并且将只发送事件删除一些冲床和返回键,应用靶向冰淇淋三明治或更早版本。要知道,其他软件输入法可能无法传送重要事件,无论版本。考虑使用像IME_ACTION_DONE编辑器操作如果需要用软键盘特异性相互作用,因为它提供了更多的知名度,以用户为你的应用程序将如何按键反应“。



文章来源: Problems intercepting space key in EditText