2010-09-18 45 views
15

我是Android新手,我似乎無法找到一個關於如何使用onKeyUp聽衆的好指南。Android開發:如何使用onKeyUp?

在我的應用程序中,我有一個很大的EditText,當有人按下並釋放該EditText中的一個鍵時,我想調用一個函數,該函數將在該EditText中執行正則表達式。

我不知道如何使用onKeyUp。有人能告訴我如何?

回答

22

非常正確的方法是使用TextWatcher類。

EditText tv_filter = (EditText) findViewById(R.id.filter); 

TextWatcher fieldValidatorTextWatcher = new TextWatcher() { 
     @Override 
     public void afterTextChanged(Editable s) { 
     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      if (filterLongEnough()) { 
       populateList(); 
      } 
     } 

     private boolean filterLongEnough() { 
      return tv_filter.getText().toString().trim().length() > 2; 
     } 
    }; 
    tv_filter.addTextChangedListener(fieldValidatorTextWatcher); 
+0

謝謝,我已經在幾年前遇到過TextWatcher類。一定忘記標記正確答案,遺憾浪費你的時間! – AlexPriceAP 2011-08-27 20:16:29

0

只爲EditText。其本身通過setOnClickListener()來實現。無需onKeyUp()。因爲這將通過點擊/觸摸事件來執行。對?只要做到這一點。

edittext_object.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
    //do what you need 
    } 
} 
+0

他可能想在onkeyup中做些什麼, – 2011-07-24 11:13:37

0

寫這從我的頭,但它應該是以下行中:

text.setKeyListener(new KeyListener() { 
    @Override 
    public boolean onKeyUp(int keyCode, KeyEvent event) { 


     if(keyCode == KeyEvent.KEYCODE_0) dosomething // pick the custom key from keyEvent 


     return super.onKeyUp(keyCode, event); 
    } 
}); 
10

更正:

有一段時間,我使用的通用onKeyListener。我很快發現我的代碼被調用了兩次。一旦按下鍵和鍵一次。我現在使用下面的監聽器,只調用一次代碼。 "if (event.getAction() == KeyEvent.ACTION_UP)"是關鍵。

OnKeyListener keyListener = new OnKeyListener() { 

    @Override 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     if (event.getAction() == KeyEvent.ACTION_UP) { 
      //do something here 
     } 
     return false; 
    } 
}; 

我發現onKeyUp()是在Activity中爲每個控件自動調用的。如果這是你想要的東西,把它添加到活動就像你添加onCreate()

例子:

public boolean onKeyUp(int keyCode, KeyEvent event) { 
    //do something here 
    return false; 
}; 

我知道這是一個老問題,但也許這將幫助其他有同樣的問題。

1

您可以考慮使用以下代碼:

@Override 
public boolean onKeyUp(int keyCode, KeyEvent event) { 
    switch (keyCode) { 
     ... 
     case KeyEvent.KEYCODE_J: 
      if (event.isShiftPressed()) { 
       fireLaser(); 
      } else { 
       fireMachineGun(); 
      } 
      return true; 
     case KeyEvent.KEYCODE_K: 
      if (event.isShiftPressed()) { 
       fireSeekingMissle(); 
      } else { 
       fireMissile(); 
      } 
      return true; 
     default: 
      return super.onKeyUp(keyCode, event); 
    } } 

這裏到底我們稱之爲super.onkeyUp方法。當用戶沒有按下有效的鍵時處理事件。

欲瞭解更多詳情,你可能需要考慮以下link