要在我们的应用中支持Emojis
,我们正在使用Downloadable fonts,如下面的guide所述。我们正在使用Emoji Support Library version 26.0.0
。该库的init代码如下。
private void initEmoji() {
final FontRequest fontRequest = new FontRequest(
"com.google.android.gms.fonts",
"com.google.android.gms",
"Noto Color Emoji Compat",
R.array.com_google_android_gms_fonts_certs);
EmojiCompat.Config config = new
FontRequestEmojiCompatConfig(getApplicationContext(), fontRequest)
.setReplaceAll(true)
.registerInitCallback(new EmojiCompat.InitCallback() {
@Override
public void onInitialized() {
Log.i(NewsHuntAppController.class.getSimpleName(), "EmojiCompat initialized");
}
@Override
public void onFailed(@Nullable Throwable throwable) {
Log.e(NewsHuntAppController.class.getSimpleName(), "EmojiCompat initialization failed",
throwable);
}
});
EmojiCompat.init(config);
}
我们在两台设备上测试了表情符号。第一个设备是Android KitKat,第二个设备是Android Nougat设备。这两款设备都具有相同的google play服务版本。我们观察到大多数Emojis在两个设备上呈现相同,但很少有Emojis在Android Nougat上加载,但在Android KitKat上没有。
以下是未在Android KitKat上加载的示例Emojis。
理想情况下,如果两个设备都具有相同的Google Play服务版本,那么应该在两个设备上呈现表情符号。但这不会发生。如果有人知道原因,请告知。
答案 0 :(得分:1)
使用最新版本的支持库,开发人员可以控制EmojiCompat是否在没有变量选择器的情况下呈现,以及该规则的例外情况。请参阅: https://developer.android.com/reference/android/support/text/emoji/EmojiCompat.Config.html#setUseEmojiAsDefaultStyle(boolean)
(https://emojipedia.org/emoji/%F0%9F%96%A5/)是一个表情符号,它是"文字表示"默认情况下。这意味着当只有U + 1F5A5存在时,标准表示建议在文本显示中呈现它(符号类型)。
这就是为什么EmojiCompat不接受它作为表情符号的原因。目前,要让EmojiCompat接受它作为表情符号,您必须使用带有表情符号变异选择器(U + FE0F)的特定代码点。即U + 1F5A5 U + FE0F
答案 1 :(得分:0)
因此,根据@Siyamed的回答,解决方案还是要添加U + FE0F。
代码如下:
private static int[] fix(int... ary) {
if (ary[ary.length - 1] == 0xfe0f) return ary;
int[] result = Arrays.copyOf(ary, ary.length + 1);
result[ary.length] = 0xfe0f;
return result;
}
...
int[] codePoints = fix(0x1f1fe, 0x1f1ea); // <- just a example, I added it to all emojis
String emoji = new String(codePoints, 0, codePoints.length);