显示内置的表情符号输入法键

10
我正在为安卓构建自定义软键盘,并想添加一个布局来包含表情符号键,类似于默认的安卓键盘(AOSP)所做的。我搜索了一下,看起来大多数人都试图显示来自图像的自定义表情符号。我想显示 Android 内置的图标(如下所示):

Android内置表情符号

似乎我应该能够使用 Unicode 字符从键盘发送图像,但我的第一次尝试似乎只生成旧版本的表情符号。如何支持手机可以处理的最新表情符号?另外,如何在我的键盘中显示上面图片中的表情符号?

有人有任何想法吗? - user1715925
4个回答

5

表情键盘

1) 我正在将包含资产的ImageView替换为包含Unicode序列的TextView,而不是使用emitos。

在交叉引用支持的Unicode序列以及Visual Unicode数据库之后,我意识到**u1F601**是一个32位的Unicode表示,而16位的表示可以设置为:

EditText messageInput = (EditText) findViewById(R.id.message_input);
messageInput.getText().append("\ud83d\ude01");

2) 如何在Android设备上使用表情符号


4

前往https://en.m.wikipedia.org/wiki/Emoji查看你的设备使用的unicode支持哪些表情符号。

如你所知,显示哪个表情符号取决于你使用的字体,因此为了获取最新的表情符号,请将NotoColorEmoji.ttf作为你应用的字体。


谢谢。然而,我的手机支持与上面截图中显示的相同的图标集。我不知道为什么当我发送相应的Unicode序列时它显示旧的图标。另外,我如何在我的自定义键盘上查看这些表情符号,就像上面的截图一样? - user1715925
假设您在键盘中使用文本视图:stackoverflow - set-font-at-runtime-textview - leonardkraemer

3

感谢所有的建议。我成功展示了自定义键盘中的表情符号布局,具体步骤如下:

  1. 在.xml布局文件中,为每个要添加的表情符号创建一行代码,例如:<Key android:codes="0x1F602" android:keyLabel="\ud83d\ude02"/>

  2. 提交按键时,请使用以下代码:getCurrentInputConnection().commitText(String.valueOf(Character.toChars(primaryCode)), 1);


2
表情符号支持并不像你想象的那样。并非所有安卓设备都支持通用的表情符号集,而且你的设备支持的表情符号可能在不同的设备上显示不同。安卓上有两种方法来处理表情符号:
1)Unicode。设备支持哪些表情符号取决于应用程序使用的字体。你只需像发送普通文本一样发送Unicode,并通过显示该字符在键盘上显示它。对于这种方法,你需要猜测手机将支持哪些表情符号。因为它取决于应用程序使用的字体,所以这是一个完全的猜测。
2)图像跨度。你可以通过在提交的文本中嵌入ImageSpannable来嵌入图像跨度。这种方法的优点是你确信你有一张图片(你需要将图片包含在你的应用程序中)。缺点是它不能发送到另一个设备,也无法保存,并且可能无法在所有应用程序中工作(它们可能不会显示spannable对象)。

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