如何实时更新编辑器操作按钮显示?

28
我的问题是:如何在软键盘上更新动作按钮的显示?另一篇文章似乎是关于在键盘显示之前更改编辑器动作: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),但我认为只有在创建自己的输入法时才能访问它。
还有其他更好的想法吗?

使视图本身失效没有起作用吗? - Joe Plante
3个回答

1
你尝试过在调用重绘代码之前实时更改/system/usr/keychars/default.kcm吗?(根据Android版本,文件名可能不同)。
在那里,你不仅可以设置键输出字符,还可以设置键显示值。我没有尝试过,它可能会导致延迟,但值得一试。

1

请在描述您想要做的事情时尽量具体...我需要多次阅读您的帖子才能理解您的请求...

所以您想要做的是如何对键盘上按下的任何键进行反应,并在键盘上的操作键上显示相关信息。 如果这不是您的目标,请解释得更详细...

如果是的话,我猜您需要使用额外的EditText(不可见),我们称之为et0。在通过ontextchanged在您的EditText中插入字母或任何您定义的模式后,将焦点更改为et0。这样您就可以更改actionKey。然后将焦点发送回您的EditText,以便您可以线程、timertask或任何方式来管理这种临时的焦点进入和从et0中移出... 在这里,重新启动输入并不是必要的。

希望这能帮助到您...


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

欢迎来到SO,在这里,解释为什么使用你的解决方案而不仅仅是如何使用是一个很好的实践。这将使你的答案更有价值,并帮助读者更好地理解你的做法。我还建议你查看我们的常见问题解答:http://stackoverflow.com/faq。 - ForceMagic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接