2012-01-17 71 views
2

我有一个在屏幕上始终可见的数字键盘(键0-9,确定和删除)的应用程序。为EditText实现自定义数字小键盘

当用户将焦点设置为具有数字输入方法的EditText时,那么在数字键盘上按下的键应该应用于焦点EditText

我目前的做法是设置在每个EditText与数字输入方法的OnFocusChanged侦听器,然后记聚焦控制:

EditText txt1 = (EditText) findViewById(R.id.editText1); 
     txt1.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
      public void onFocusChange(View v, boolean hasFocus) { 
       if(hasFocus) 
        focused = (EditText)v; // focused is a member of the Activity class 
      }}); 

然后,当按下一个数字键盘键的键被施加到focused控制。

对我来说,这似乎有点复杂,有没有一种更简单的方法,使用数字输入法在所有EditText窗口小部件上自动工作(没有焦点更改侦听器)?

其次,是否有一种方法来禁用那些只有数字输入的那些EditText小部件的软键盘?

回答

1

我想你可以使用onKeyDown()作为你的EditText(我们称之为numberBox)。

的逻辑是这样的:

让我们说你有一个集合中的所有的数字按钮:

private ImageButton []digitButtons = new ImageButton[10]; 

比你设定的onClickListeners为每个按钮:

private void setClickListenersForDigitButtons() { 

    for(int i=0; i < digitButtons.length; i++) { 

     int resId = getResources().getIdentifier(getPackageName()+":id/btn_digit_"+i, null, null); 

     digitButtons[i] = (ImageButton)findViewById(resId); 

     final int keyCode = KeyEvent.KEYCODE_0 + i; 

     digitButtons[i].setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       keyPressed(keyCode); 
      } 
     }); 
    } 

} 

而且在keyPressed方法:

private void keyPressed(int keyCode) { 

    KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, keyCode); 
    numberBox.onKeyDown(keyCode, event); 
}