2012-02-24 38 views
1

我想用EditText(只允许int)和KeyEvent开发一个小部件。问题是当按下'0'时,它检测到KeyEvent,但它不会在我的EditText上写'0'。它应该添加数字,以便我按下它们。使用EventKey的EditText上的setText

et1.setOnKeyListener(new OnKeyListener() { 
    @Override 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     if (KeyEvent.ACTION_UP != event.getAction()) { 
      switch (keyCode) { 
       case KeyEvent.KEYCODE_0: 
        //Do something... 
        break; 
       default: 
        return false; 
      } 
     } 
     return true; 
    } 
}); 

我试过做这样的事情,但它不是那么高效。

et1.setText(et1.getText().toString + "0"); 

你知道某种解决方案吗?

+1

以防万一你重新发明轮子:'android:inputType =“number”'参见http://stackoverflow.com/questions/4645119/how-to-set-only-numeric-value-for-edittext-在-机器人。 – 2012-02-24 17:13:37

+0

我在我的activity.xml中使用过它,但是我的问题是当我按下键时,它没有出现在我的EditText上,但它生成了一个KeyEvent。我可以在两个时间吗? – 2012-02-24 17:29:38

回答

1

让我尽量让自己清楚佩普:

1)如果你正在尝试实现是有一个EditText,只允许整数(数字)输入,你可以添加一个属性,是s它。您不需要该行为的自定义控件。

android:inputType="number" 

2)为什么你没有得到你的EditText任何输入很简单,因为你是在覆盖onKey方法返回true阻止它的原因。

ref说,onKey应该返回:

如果

真正的听众已经消耗的情况下,否则为false。

这意味着,如果你正在返回true,你负责,你EditText的Android不会输入任何内容。由于你自己并没有(至少在你提供的代码中),EditText没有被填充。

所以,我建议你应该完全删除处理程序,并像xml那样添加inputType属性。


更新

如果您需要更新EditText(姑且称之为EditText1)基于另一个(EditText2)输入,我建议跟踪输入中的第一个与TextWatcher并设置text编辑文本与处理的值。

检查this similar issue的示例代码。

+0

非常感谢@ Zortkun您的兴趣。我在'xml'中使用'inputType'。我问,因为我想用两个'EditText'做一个小部件。当我把数字放在一个'EditText'中时,另一个填充了算术转换,因此,我想要做一个事件并填充。 – 2012-02-24 18:42:37

+0

嘿。感谢您接受答案,但我想你有一个不同的问题。我会更新并为您推荐一些方法。 – 2012-02-25 22:07:30

+0

这正是我需要的!非常感谢! – 2012-02-27 07:06:14

相关问题