2012-02-24 40 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

相關問題