如何通过代码检测Android上的表情符号支持

如何通过代码检测Android上的表情符号支持,android,emoji,android-api-levels,Android,Emoji,Android Api Levels,通过代码,我可以制作一个按钮,将这3个表情插入到文本中:⚽️ 我自己刚刚为这个问题实现了一个解决方案。Android的好处在于它是开源的,所以当你遇到这些问题时,你很有可能找到一种方法来帮助你 在Android开源项目中,您可以找到一种方法,他们使用Paint.hasGlyph来检测给定表情符号是否存在字体。然而,由于这种方法在API 23之前不可用,他们也会测试渲染,并将结果与“豆腐”(您在帖子中提到的[x]字符)的宽度进行比较 这种方法还有其他一些缺点,但应该足以让您开始 谷歌资料来源:

通过代码,我可以制作一个按钮,将这3个表情插入到文本中:⚽️ 我自己刚刚为这个问题实现了一个解决方案。Android的好处在于它是开源的,所以当你遇到这些问题时,你很有可能找到一种方法来帮助你

在Android开源项目中,您可以找到一种方法,他们使用
Paint.hasGlyph
来检测给定表情符号是否存在字体。然而,由于这种方法在API 23之前不可用,他们也会测试渲染,并将结果与“豆腐”(您在帖子中提到的[x]字符)的宽度进行比较

这种方法还有其他一些缺点,但应该足以让您开始

谷歌资料来源:


  • 根据杰森·戈尔的回答

例如,创建布尔canShowFlagEmoji:


当你点击详细信息时,你可以得到表情符号的替代品。

另一个选择可能是包括Android“表情符号兼容性”库,该库将检测并向运行在Android 4.4(API 19)及更高版本上的应用程序添加任何所需的表情符号:

我怀疑X来自苹果iPhone或iPad,我有一个Galaxy好几年了,我家里每个人都有iPhone。我总是会收到消息,然后是X,而不是它应该是的表情符号。我可能对iphone和android表情符号有问题,但我想尝试通过代码检测表情符号的支持,我认为这是最安全的。如果你已经解决了你的问题,我很想看看你所做的事情的细节。检查一下,我还没有机会测试这个,但是在答案中得到一些实际的代码肯定是比链接更好的。flag/penguin测试在我的4.1设备上失败了,它肯定有表情符号:(谢谢你,但那座图书馆并不好玩。你必须对图书馆进行特别的管理,更不用说其他的问题了
 private static boolean canShowFlagEmoji() {
        Paint paint = new Paint();
        String switzerland = "\uD83C\uDDE8\uD83C\uDDED"; //  Here enter Surrogates of Emoji
        try {
            return paint.hasGlyph(switzerland);
        } catch (NoSuchMethodError e) {
            // Compare display width of single-codepoint emoji to width of flag emoji to determine
            // whether flag is rendered as single glyph or two adjacent regional indicator symbols.
            float flagWidth = paint.measureText(switzerland);
            float standardWidth = paint.measureText("\uD83D\uDC27"); //  U+1F427 Penguin
            return flagWidth < standardWidth * 1.25;
            // This assumes that a valid glyph for the flag emoji must be less than 1.25 times
            // the width of the penguin.
        }
    }
if (canShowFlagEmoji()){
    // Code when FlagEmoji is available
} else {
    // And when not
}