我正在尝试开发一个具有EditText(仅允许int)和KeyEvent的小部件。问题是当按下“ 0”时,它检测到KeyEvent,但没有在我的EditText上写入“ 0”。它应该加上数字,以便我按它们。

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");


您知道某种解决方案吗?

最佳答案

让我尝试让自己清楚一点:Pep:

1)如果您要实现的是具有仅允许整数(数字)输入的EditText,则可以添加一个属性并且仅此。您不需要针对该行为的自定义控件。

 android:inputType="number"


2)之所以没有在EditText中获得任何输入,仅仅是因为您通过在覆盖的true方法中返回onKey来阻止它。

ref说,onKey应该返回:


  如果侦听器已消耗事件,则为true,否则为false。


这意味着,如果您要返回true,则由您负责,Android不会在您的EditText中输入任何内容。由于您自己(至少在提供的代码中)没有执行此操作,因此不会填充EditText。

因此,我建议您应该像以前一样完全删除处理程序,并在inputType中添加xml属性。



更新资料

如果您需要根据另一个输入(EditText2)的输入来更新EditText(我们将其称为EditText1),建议您使用TextWatcher跟踪第一个输入中的输入,并使用处理后的值设置text EditText2 。

检查this similar issue以获取示例代码。

10-08 13:10
查看更多