2012-01-17 9 views
2

私は、画面に常に表示される数字キー(0-9、OK、Deleteキー)を持つアプリケーションを持っています。EditText用のカスタムナンプラを実装する

数値入力メソッドを持つEditTextにフォーカスを設定すると、フォーカスされたEditTextには、数値パッドで押したキーを適用する必要があります。

私の現在のアプローチは、数値の入力方法と、各EditTextOnFocusChangedリスナーを設定し、集中制御を覚えている:テンキーのキーが押されたとき

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ウィジェットには、フォーカス変更リスナーなしで自動的に動作する簡単な方法がありますか?

第2に、数字入力のみのEditTextウィジェットのソフトキーボードを無効にする方法はありますか?

答えて

1

EditTextにはonKeyDown()を使用することができます(これをnumberBoxとしましょう)。

ロジックはこれです:

はあなたがコレクション内のすべての数字のボタンを持っているとしましょう:あなたは、各ボタンのonClickListenersを設定

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

より:

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); 
} 
関連する問題