2017-04-14 18 views
1

this tutorial私は完全に機能するAndroid OSキーボードを作成しました。それはアルファベット/数字の標準的な量です。Androidカスタムキーボード - 要求されたキーボードタイプを検出する方法

数値キーボード用に2番目のキーボードマークアップがあります。

私が検出できないように見えるのは、どのタイプのキーボードがテキスト入力ボックスで指定されているかです。 edittextはタイプ editText.setInputType(InputType.TYPE_CLASS_TEXT); を指定しますが、IMEサービスがこれを検出して正しいキーボードを表示するにはどうすればよいですか?

public class MyKeybdIME extends InputMethodService implements KeyboardView.OnKeyboardActionListener { 
    private KeyboardView kv; 
    private Keyboard keyboard; 
    private Keyboard numboard; 
    private boolean caps = false; 
    @Override 
    public View onCreateInputView() { 
     kv = (MKeyboardView)getLayoutInflater().inflate(R.layout.keyboard, null); 
     keyboard = new Keyboard(this, R.xml.qwertyfull); 
     numboard = new Keyboard(this, R.xml.num); 

//  InputMethodManager imm = (InputMethodManager)  getSystemService(Context.INPUT_METHOD_SERVICE); 
//How can you detect what is being asked for?  
//  imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0); 
// Or am I on the wrong path for this part? 


     kv.setKeyboard(keyboard);//... Or numboard when the entry requests a numeric keyboard 
     kv.setOnKeyboardActionListener(this); 
     return kv; 
    } 

答えて

1

カスタムキーボードクラスでonStartInputを上書きできます。 sample Android keyboardから取得した関連コードは次のとおりです。

@Override public void onStartInput(EditorInfo attribute, boolean restarting) { 
    // ... 

    switch (attribute.inputType & InputType.TYPE_MASK_CLASS) { 
     case InputType.TYPE_CLASS_NUMBER: 
      // ... 
      break; 
     case InputType.TYPE_CLASS_DATETIME: 
      // ... 
      break; 
     case InputType.TYPE_CLASS_PHONE: 
      // ... 
      break; 
     case InputType.TYPE_CLASS_TEXT: 
      // ... 
      break; 
     default: 
      // ... 
    } 

    // ... 
} 
関連する問題