android edittext过滤空格,关于android:在EditText中拦截空格键的问题

我正在尝试为用户提供一种从EditText向TextView输入文本的方法。 但是,如果用户输入了某些内容并想要对其进行修复,我希望他们能够在空的EditText上按空格以获取他们回写的最后一件事。 第一个问题是,如果他们键入" hello",请按Enter键将其添加到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中。

您能详细说明一下它的行为方式吗? 根据您的第一个描述,我无法说出为什么它不是您想要的。

我不确定您没有理解什么,对不起。 我认为这很清楚。 如果用户键入字符串(例如,hello)并按回车,则将清除EditText并将该字符串发送到TextView。 我希望用户能够按空格键以将该字符串带回。 在此示例中,按空格键应返回" hello"。 不幸的是,我得到了额外的"问候"。

哦,我明白了。 谢谢。

解决多余空间问题的一种简单方法是在将字符串放入EditText之前,先从字符串中删除该空格

b1 = b1.substring(1); //

ti.setText(b1);

ps。我强烈建议使用更具描述性的变量名称。如果使用ti和b1之类的名称,您的程序可能会令人困惑。在程序的上下文中,这些选择也许更有意义。但是,根据您在此处显示的内容,很难分辨出这些名称指的是什么。

在上下文中,它们更有意义。至于您的解决方案,我真的希望避免这样的事情,因为那是那种您很容易忘记的事情,并且如果事情发生了变化,就会发现一些有趣的错误。

您可以使用TextWatcher来检查每个字符,如果EditText为空,如果它是空格,则可以将其设置为忽略。但是,对于您想要实现的目标,这对我来说似乎太过分了。

可能矫kill过正,但这确实有效。谢谢。我什么也做不到。

对于第一个问题,我怀疑您在满足" 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或更高版本为目标的应用程序,并且仅会在按下Delete和Delete键时发送事件。将按键返回给以Ice Cream Sandwich或更早版本为目标的应用程序。请注意,其他软件输入方法可能永远不会发送按键事件,无论版本如何;如果您需要与软件键盘进行特定的交互,请考虑使用IME_ACTION_DONE之类的编辑器操作,因为它可以使您更直观地了解用户了解您的应用对按键的反应。"

好吧,这解释了为什么它不起作用。 (我返回的是true,不确定该如何复制进来)。我在文档中错过了。我会仔细研究IME_ACTION_DONE。那实际上覆盖了回车键?

因此,我可以在这里实现一半的功能。我具有用于Enter键的onActionEvent,该操作与IME_ACTION_DONE一样。但是,我仍然需要实现将最后一项拉入的功能。我试图使用event.isShiftPressed(),以便如果按下shift键,它将调用最后一项;如果未按下shift键,则只需输入文字像正常的一样。但是,isShiftPressed()似乎总是返回false。

我将Enter键的解决方案与空格键的Tims分开使用。由于我无法选择两个答案,因此我不得不选择Tims,因为它可以帮助解决两个问题中的较大者。无论如何都投票给您,感谢您的帮助!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值