首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android Emoji支持库未在所有设备上呈现Emoji

Android Emoji支持库未在所有设备上呈现Emoji
EN

Stack Overflow用户
提问于 2017-11-22 20:49:16
回答 2查看 993关注 0票数 1

为了在我们的应用程序中支持Emojis,我们使用了下面guide中提到的Downloadable fonts。我们使用的是Emoji Support Library version 26.0.0。库的初始化代码如下所示。

代码语言:javascript
复制
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服务版本。我们观察到,大多数表情符号在两个设备上都呈现相同的效果,但很少有表情符号可以加载到安卓Nougat上,而不是加载到安卓KitKat上。

以下是未在安卓KitKat上加载的示例表情符号。

代码语言:javascript
复制

理想情况下,如果两个设备都有相同的google play服务版本,那么表情符号应该在两个设备上呈现。但这并没有发生。如果有人知道这件事的原因,请告诉我。

EN

回答 2

Stack Overflow用户

发布于 2018-01-15 14:51:58

有了最新版本的支持库,开发人员可以控制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将其接受为表情符号,您必须通过emoji变体选择器(U+FE0F)使用该特定代码点。即U+1F5A5 U+FE0F

票数 1
EN

Stack Overflow用户

发布于 2019-02-23 17:53:09

因此,根据@Siyamed的回答,解决方案是无论如何都要添加U+FE0F。

代码如下所示:

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47435188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档