Подтвердить что ты не робот

Как я могу обновить отображение кнопки действия редактора на лету?

Мой вопрос: как я могу обновить отображение кнопки действия на мягкой клавиатуре "на лету"?

Другое сообщение, похоже, связано с изменением действия редактора ПЕРЕД клавиатурой: Android: не могу понять, как использовать setImeActionLabel. Я хотел бы изменить кнопку действия мягкой клавиатуры, пока она показывается.

Я частично преуспел: - Я могу изменить действие, используя: editText.setImeOptions(EditorInfo.IME_ACTION_GO); - Я также могу перерисовать клавиатуру, используя: InputMethodManager.restartInput(editText); Я делаю это с помощью TextWatcher.afterTextChanged. - Однако у меня есть проблема с этим. Если я нажимаю клавишу, то сверху клавиатура показывает, какая клавиша была нажата. Но когда я вызываю restartInput (...), это также скрывает представление, которое показывает, какой ключ был нажат. Это кажется мне нормальным поведением, но мне нужно обойти это.

Расширение EditText и переопределение onKeyUp не является хорошей идеей, см. https://groups.google.com/forum/?fromgroups#!topic/android-developers/RIxGfx5qOjM.

Класс KeyboardView имеет то, что мне нужно (invalidateKey), но я думаю, что он доступен только при создании собственного метода ввода.

У кого-нибудь есть идеи?

4b9b3361

Ответ 1

Пожалуйста, постарайся быть более конкретным, когда расскажешь о том, что ты хочешь сделать... Мне нужно было много раз прочитать ваш пост, чтобы понять ваш запрос.

Итак, что вы хотите сделать, так это как реагировать на любую нажатую клавишу на клавиатуре и показывать информацию об этом в ключе действия на клавиатуре. Если это не ваша целевая PLZ, чтобы объяснить больше...

Если да, поэтому, я думаю, вам нужно будет использовать addaL EditText (не видно), позвоните по вызову et0. после завершения вставки буквы или любого шаблона, который вы определяете через текст в тексте редактирования, измените фокус на et0.., чтобы вы могли изменить действиеKey.., а затем отправить фокус обратно в ваш editText.., чтобы вы могли нить или timertask, или любым способом управлять этим временным изменением фокуса на и из et0.. здесь его не нужно перезапускать вход.

надеюсь, что это поможет вам.

Ответ 2

Вы пытались изменить /system/usr/keychars/default.kcm на лету, прежде чем вызывать код перерисовывания? (имя файла может отличаться в зависимости от версии Android).

Там вам разрешено задавать не только ключевые выходные символы, но и ключевые отображаемые значения. Я не пробовал, он может также задерживаться, но стоит попробовать.

Ответ 3

Это должно быть очень полезно для вас.

EditText in = new EditText(this); 
in.addTextChangedListener(new TextWatcher() { 
    public void onTextChanged(CharSequence cs, int s, int b, int c) { 
        Log.i("Key:", cs.toString()); 
    }
    public void afterTextChanged(Editable editable) {} 
    public void beforeTextChanged(CharSequence cs, int i, int j, int k) {} 
});