2013-02-05 48 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