SoftKeyboard不允许在同一个Key上使用keyOutputText和keyIcon

时间:2011-06-14 04:23:42

标签: android android-softkeyboard

我正在尝试修改SoftKeyboard示例(Moto Xoom上的Andriod 3.1),以便我可以使用键上的图标,并在按下该键时输出unicode字符。< br />具体来说,我试图让它输出一个横幅八分音符(音乐符号),即unicode \u266B

遗憾的是,我无法在keyOutputText文件中使用keyIconsymbols.xml来设置密钥。

我需要keyIcon,因为我无法找到将Typeface上的Keyboard Keys更改为具有该角色的方法。我找到了我会去做的地方,但是它调用私有方法(.setTypeFace)埋在android.jarKeyboardView,如果我记得的话),所以我做不到。

所以我只是用一个图标来放上钥匙。这与android:codes结合使用效果很好,但{I} android:codes在我提供unicode字符的时候不会输出android:codes="\\u266B"字符。我需要android:keyOutputText="\u266B"才能让角色实际输出到我的EditText。所以我可以让键显示一个我的角色的图标,EditText显示角色本身,但不是两个一起。

当我尝试使用2时,它编译并运行就好了,然后我按下键盘上的shift键来显示符号,只显示数字0-9,键盘的其余部分就消失了。现在错误消息或任何东西,刚刚消失。没有任何地方说这两件事是我能找到的,它也没有任何合理意义。

如果这是一个错误,我只是想要知道所以我可以接受它并且不再对它进行撞击(计划的修复日期也会很好)。如果没有,我怎样才能同时获取keyboardEditText框中的密钥以显示我的第八个音符。我愿意接受任何建议或工作。

谢谢。

3 个答案:

答案 0 :(得分:1)

使用HashMap将android:代码映射到你的unicode角色。

在XML中:

<Key android:codes="719" android:keyIcon="@drawable/zo"/> //use your icon and required code here

在java代码中:

HashMap<String, String> keyCodeMap = new HashMap<String, String>();
keyCodeMap.put("719", ""+'\u0986');

然后,在onKey(int primaryCode, int[] keyCodes)方法中使用以下代码获取相应的字符:

   String c = keyCodeMap.get(String.valueOf(primaryCode)); 

在需要的地方使用c的值。

答案 1 :(得分:0)

不确定这是否真的有用,因为它适用于AnySoftKeyboard,但问题是一样的,所以也许解决方案也是如此?

解决问题的方法(对我来说,为ASK创建布局)是这样的:

keyIconkeyOutputText提供为android:codes,但不是keyLabel! 使用android:代码的第一个字母填充keyLabel(由ASK?),但您仍然可以看到图像并输出多字母文本。

希望它有所帮助,无论如何都值得一试。我想。

(请注意:我刚刚发现了这一点,虽然我可以重现它,但我无法保证这是否真的解决了这个问题。不过我真的这么认为。)

答案 2 :(得分:0)

不要在\u266B中使用android:codes,而是尝试unicode的int值:0x266B

然后从onKey您可以使用以下命令将其转换回String:

Character.toString((char)primaryCode)