如何通过代码

时间:2016-08-28 18:42:49

标签: android emoji android-api-levels

通过代码,我可以创建一个按钮,将这3个表情符号插入到文本中:⚽️

在用户点击按钮的许多手机上,问题是⚽️显示为[X] [X] [X] 。或者更糟糕的是,它只显示三个空格。

我想在没有正确显示表情符号的Android设备上禁用和隐藏我自己的内置表情符号键盘。如果设备有表情符号支持,是否有人知道或有关于如何检测代码的提示?

我已经读过android 4.1支持表情符号,但这不是我的经验......

4 个答案:

答案 0 :(得分:9)

我自己刚刚为这个问题实现了解决方案。 Android的好处在于它是开源的,所以当你遇到这些问题时,你很有可能找到一种方法来帮助你。

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

这种方法还有其他一些失误,但它应该足以让你开始。

Google来源:

答案 1 :(得分:6)

基于Jason Gore回答

例如,创建布尔 canShowFlagEmoji

 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
}

表情符号的代理人,当您点击详细信息时,您可以获得here

答案 2 :(得分:1)

另一种选择可能是包含Android“表情符号兼容性”库,它会检测并向Android 4.4(API 19)及更高版本上运行的应用添加任何所需的表情符号字符:{{3 }}

答案 3 :(得分:0)

        final Paint paint = new Paint();
        final boolean isEmojiRendered;
        if (VERSION.SDK_INT >= VERSION_CODES.M) {
            isEmojiRendered = paint.hasGlyph(emoji);
        }
        else{
            isEmojiRendered = paint.measureText(emoji) > 7;
        }

宽度 > 7 部分特别笨拙,我希望不可渲染表情符号的值是 0.0,但在一些设备上,我发现不可渲染的值实际上介于 3.0 到 6.0 之间,而 12.0到 15.0 可渲染。您的结果可能会有所不同,因此您可能需要对其进行测试。我相信字体大小也会影响 measureText() 的输出,所以请记住这一点。

第二部分由 RogueBaneling 在这里回答how can I check if my device is capable to render Emoji images correctly?