Как я могу обновить отображение кнопки действий редактора на лету? - PullRequest
28 голосов
/ 07 января 2011

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

Кажется, что еще один пост об изменении действия редактора ДО отображения клавиатуры: 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), но я думаю, что он доступен только тогда, когда вы создаете свой собственный метод ввода.

У кого-нибудь еще есть идеи получше?

Ответы [ 3 ]

1 голос
/ 31 октября 2012

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

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

1 голос
/ 20 октября 2012

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

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

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

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

0 голосов
/ 08 ноября 2012

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

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) {} 
});
...