我是Android和Eclipse开发的新手,但对于一般的软件开发并不陌生。
作为我的第一个真正的项目,为了克服学习曲线,我正在修改SDK示例软键盘以包含“宏”功能。
主要功能正常。但是,我无法在两种情况之一中更新键盘按键图标。
我创建了一个功能键“Fn”,当我按下后跟一个字母键时,我会将一个预定义的字符串插入编辑字段 - 就像我的电子邮件地址一样。
在第一种情况下,当我按下功能键时,我更改图标以表示“功能激活”。如果我反复按功能键,图标会在表示活动和非活动之间来回切换。这是正确的。
在第二种情况下,我按下功能键,图标改变以表示“功能激活”,然后我按一个字母键。正确地在任何文本字段中输入宏字符串,在代码I中,然后将“功能”状态更改为非活动状态并更新图标。
使用日志我可以看到执行代码以正确更改图标,但图标不会更改。它仍然显示“功能激活”状态,即使我看到内部标志已更改为非活动状态,并且我可以看到正确写入了关键图标drawable以使该键显示“功能处于非活动状态”。
我尝试了很多不同的东西 - 无济于事。
在这种情况下会发生什么阻止此密钥图标更新?
第二种情况下的所有内容似乎都执行与第一种情况相同的代码 - 有效的情况,反复按功能键。我能想到一个区别。反复按功能键时,功能键有“焦点”。当我按下功能键然后按一个字母键时,字母键是“焦点”键。我不知道这是否有意义。我试过寻找某种无效的方法,但我找不到任何东西。
非常感谢任何提示或建议。
谢谢, 百里
答案 0 :(得分:2)
如果我没记错的话,软键盘示例使用2种不同的键盘布局,并在按下它们时在它们之间切换。一个人“不活跃”,另一个人“活跃”。
但是,根据我的理解,您实际上是在不切换键盘布局的情况下更改物理图标。如果是这种情况,则每次都需要重新创建键盘。为什么?首次创建键盘视图时,会反复重复使用。即使您更改了图标,也不一定会重新创建视图。
之前我遇到过这种问题。尝试重新创建您的Keyboard对象 - 这也将重新创建视图。 Keyboard类中的函数createKeyFromXml是实际创建“键”的位置。如果您将日志放入此函数中,则只有在第一次创建/显示对象时,才会为每个键调用一次。