如何动态更新编辑器操作按钮显示?

时间:2011-01-06 23:20:59

标签: android keyboard key action

我的问题是:如何快速更新软键盘操作按钮的显示?

另一篇文章似乎是关于在显示键盘之前更改编辑器操作:Android: Can't figure how to use 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 个答案:

答案 0 :(得分:1)

当你描述你想做什么时,请尝试更具体...我需要多次阅读你的帖子才能理解你的要求..

所以你要做的是如何对键盘上按下的任何键做出反应,并在键盘上的动作键中显示有关它的信息。 如果那不是你的目标plz来解释更多...

如果是,那么我猜你需要使用additionaL EditText(不可见)让我们调用et0。完成插入一个字母或任何你在编辑文本中通过ontextchanged定义的模式后,将焦点更改为et0 ..这样你就可以更改actionKey ..然后将焦点发送回你的editText ..所以你可以线程或时间戳,或任何方式管理这种临时改变焦点进出et0 .. 这里没有必要重新启动输入。

希望对你有帮助..

答案 1 :(得分:1)

您是否尝试在调用重绘代码之前即时更改/system/usr/keychars/default.kcm? (根据Android的版本,文件名可能会有所不同。)

在那里,您不仅可以设置键输出字符,还可以设置键显示值。我没有尝试过,也可能会有延迟,但值得一试。

答案 2 :(得分:0)

这应该对你非常有用。

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