带有 EmojiCompat 的 ImageSpan

问题描述 投票:0回答:1

使用 AndroidX emoji2 EmojiCompat,当我在包含表情符号的某些文本上设置

ImageSpan
时,它最终会被
EmojiSpan
分割并显示两张图像,中间表情符号的每一侧各一张,而不是一张图像并且没有表情符号。

对此有什么解决方法吗?我不想在人们输入其他表情符号时完全禁用文本框中的 EmojiCompat,但我希望我的 ImageSpan 不会被它打乱...

android androidx imagespan
1个回答
0
投票

您遇到的 EmojiCompat 拆分 ImageSpan 并导致意外行为的问题可能是由于 EmojiCompat 处理和替换文本范围中的表情符号的方式造成的。要解决此问题,同时仍对其他表情符号使用 EmojiCompat,您可以考虑以下步骤:

仅将 EmojiCompat 用于显示:仅将 EmojiCompat 应用到包含表情符号的文本,但排除要放置 ImageSpan 的文本。这可以通过创建仅影响文本的特定部分的自定义 EmojiCompat 配置来完成。您可以将 EmojiCompat.init() 方法与自定义 EmojiCompat.Config 结合使用,该配置仅启用特定 TextView 或 Spans 的表情符号处理。

EmojiCompat.Config customConfig = new EmojiCompat.Config.Builder()
    .setReplaceAll(true) // You might need to adjust this based on your requirements
    .build();

EmojiCompat.init(customConfig);

考虑以下方法来缓解该问题:

表情符号替换字符串:不要直接使用表情符号,而是在文本中使用 Unicode 表情符号替换字符串。此步骤可以避免 EmojiCompat 用图像跨度替换表情符号。例如,选择“\u2728”(代表星星表情符号)而不是使用视觉 ✨ 表情符号。

直接使用表情符号图像:将表情符号图像直接合并到应用程序的资源中,将它们与您的 ImageSpan 一起集成。此策略使您可以更好地控制表情符号渲染和自定义 ImageSpan。首先识别与表情符号对应的 Unicode 代码点,然后从可靠来源获取相应的表情符号图像。将这些图像合并到应用程序的可绘制资源中。通过将这些图像与 ImageSpan 一起使用,您可以实现一致的渲染。

自定义 EmojiCompat 配置:尝试 EmojiCompat 的配置设置。通过修改替换行为和处理选项,您可以减少 EmojiCompat 对 ImageSpan 造成的潜在破坏。可能需要微调这些设置才能获得所需的结果。

需要注意的是,考虑到 Android 表情符号渲染和兼容性的复杂性,这些策略可能需要一定程度的反复试验。跨不同设备和 Android 版本进行全面测试对于确定适合您的特定场景的最佳方法至关重要。

© www.soinside.com 2019 - 2024. All rights reserved.