Как получить программную клавиатуру типа (QWERTY, (X) T9 и т. Д.)? - PullRequest
3 голосов
/ 16 сентября 2011

В серии EditText видов курсор должен автоматически перейти к следующему виду после ввода 5-го символа.

Я делаю так:

@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  int twTreshold = 4;

  etKey1 = (EditText) findViewById(R.id.et_levels_key1);
  // ...
  etKeyX = (EditText) findViewById(R.id.et_levels_keyX);

  etKey1.addTextChangedListener(new TextWatcher() {

    public void onTextChanged(CharSequence s, int start, int before, int count) {
      if (s.length() > twTreshold)
        etKey2.requestFocus();
    }

    @Override
    public void afterTextChanged(Editable arg0) {
      if (currentText.length() > twTreshold)
      etKey2.requestFocus();
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count,
      int after) {
    }
  });
}

Теперь проблема: Пользователь может использовать клавиатуру T9 или аналогичную. Там для ввода буквы «B» необходимо нажать кнопку «ABC» на клавиатуре. «A» присоединяется к тексту EditText, событие onTextChanged() вызывается. Слишком рано! Пользователь все еще должен нажать кнопку «ABC» в другой раз, чтобы заменить «A» на желаемую «B».

Моя идея состояла в том, чтобы получить тип клавиатуры и, если она относится к тому типу, который упоминался здесь, просто не переключать фокус автоматически.

Может быть, у кого-то есть идея, как узнать тип клавиатуры?

Большое спасибо!

...