android - 在 Android TextView 中去除 Emoji Fitzpatrick(肤色)字符

标签 android textview emoji emoji-tones

我正在尝试显示一些可以包含在 iOS 版本的应用程序上创建的表情符号的文本。当我们在 Android 上渲染这些字符时,我会在表情符号旁边看到 [x]。

有没有办法扩展Android TextView,以便在渲染textview时忽略肤色字符。

我尝试创建一个正则表达式来用空字符替换它们,但 Android Studio 提示该正则表达式无效,因为不支持十六进制字符语法,而且看起来其他转义字符也被删除了

replaceAll("[\\x{1f3fb}-\\x{1f3ff}]", "")

最佳答案

我想我终于解决了。

public class CustomTextView extends AppCompatTextView {

  private static final String FITZPATRICK_PREFIX = "\uD83C";

  public CustomTextView(Context context) {
      this(context, null);
  }

  public CustomTextView(final Context context, final AttributeSet attrs) {
    this(context, attrs, 0);
  }

  public CustomTextView(final Context context, final AttributeSet attrs, final int defStyleAttr) {
    super(context, attrs, defStyleAttr);
  }

  @Override
  public void setText(final CharSequence text, final BufferType type) {
    super.setText(stripFitzpatrickCharacters(text == null ? "" : text.toString()), type);
  }

  public static String stripFitzpatrickCharacters(@NonNull final String string) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N && string.contains(FITZPATRICK_PREFIX)) {
        final String[] parts = string.split(FITZPATRICK_PREFIX);
        final StringBuilder builder = new StringBuilder();
        builder.append(parts[0]);
        for (int i = 1; i < parts.length; i++) {
            builder.append(parts[i].substring(1));
        }
        return builder.toString();
    } else {
        return string;
    }
}

}

关于android - 在 Android TextView 中去除 Emoji Fitzpatrick(肤色)字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38455118/

相关文章:

android - 在 Android 中使用 SOAP 调用 SOAP Web 服务时如何获得往返时间?

html - 如何在 HTML 中指定 Unicode 字符的表情符号版本?

android - 如何在 textview 中设置 unicode 以在 android 中显示表情符号?

android - 如何单击或点击不同单词上的 TextView 文本?

java - 使用表情符号 unicode 标志国家/地区创建字符串

android - 如何在后台线程处于 Activity 状态时保持动画运行?

Android 偷偷解锁拍照

android - 使用 NoActionBar 主题时显示操作栏

java - 如何从ListView中提取选定的项目?

android - 如何识别textview到达屏幕底部?