2013-02-05 50 views
2

我有一個EditText字段,我想介紹某種自動填充功能。如果按下「S」按鈕,我目前所要做的就是用「特殊CT」填充EditText框。這是我的:在EditText上實現自動填充

ctEditText = (EditText) findViewById(1001); 
    ctEditText.setOnKeyListener(new OnKeyListener() { 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      Log.i("KEY", "PRESSED"); 
      // if keydown and "enter" is pressed 
      if ((event.getAction() == KeyEvent.ACTION_DOWN) 
       && (keyCode == KeyEvent.KEYCODE_ENTER)) { 

       return true; 

      } else if ((event.getAction() == KeyEvent.ACTION_DOWN) 
       && (keyCode == KeyEvent.KEYCODE_S)) { 
       Log.i("KEY", "S"); 
       if(ctEditText.getText().toString().length() == 1) { 
        ctEditText.setText("Special CT"); 
       } 
       return true; 
      } 

      return false; 
     } 
    }); 

有了這段代碼,按下「S」按鈕對我來說絕對沒有什麼。在我按下鍵盤右下角的輸入按鈕之前,我的LogCat不會顯示任何LogCall。當我按下輸入按鈕時,無論在輸入按鈕之前按下了多少個不同的按鍵,它都會顯示KEY PRESSED日誌調用兩次。

編輯

所以它亂搞經過一些我已經意識到,Log呼叫出現兩次的原因是因爲當我釋放了輸入鍵,以及它正在出現。我也有S鍵撥打KEY PRESSED日誌通話,但它仍然不被我的If statement識別。

回答

1

試試這個:

ctEditText = (EditText) findViewById(1001); 
ctEditText.setOnKeyListener(new OnKeyListener() { 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     Log.i("KEY", "PRESSED"); 
     // if keydown and "enter" is pressed 
     if (ctEditText.getText().toString().equalsIgnoreCase("S")) { 
      Log.i("KEY", "S");    
      ctEditText.setText("Special CT");    
      return true; 
     } 
     else if ((event.getAction() == KeyEvent.ACTION_DOWN) 
      && (keyCode == KeyEvent.KEYCODE_ENTER)) { 

      return true; 

     } 

     return false; 
    } 
}); 

只是檢查輸入的文本等於 「S」

if (ctEditText.getText().toString().equalsIgnoreCase("S")) 

更妙的是,你可以使用TextWatcherexample

+0

我嘗試使用第一碼塊,但不幸的是按下「S」鍵根本不觸發「OnKeyListener」,所以if語句甚至沒有機會到達。至於'TextWatcher',我認爲這對我的情況來說不是最好的。我有很多EditText字段可以操作,但是隻有少數人可以通過TextWatcher獲得更多收益,我想保持它的統一。 – JuiCe