2012-01-17 65 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); 
}