Удаление символов Emoji Fitzpatrick (тон кожи) в Android TextView

android textview emoji emoji-tones

213 просмотра

1 ответ

9258 Репутация автора

Я пытаюсь отобразить текст, который может содержать смайлики, созданные в версии приложения для iOS. Когда мы отрисовываем эти символы на Android, я вижу [x] рядом с эмодзи.

Есть ли способ расширить Android TextView, чтобы символы тона кожи игнорировались при визуализации текстовых представлений.

Я пытался создать регулярное выражение, чтобы заменить их пустыми символами, но Android Studio жалуется, что регулярное выражение недопустимо, потому что синтаксис шестнадцатеричных символов не поддерживается, и похоже, что другие escape-символы также удалены

replaceAll("[\\x{1f3fb}-\\x{1f3ff}]", "")
Автор: Barry Irvine Источник Размещён: 19.07.2016 09:53

Ответы (1)


2 плюса

9258 Репутация автора

Я думаю, что наконец-то решил это.

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;
    }
}

}

Автор: Barry Irvine Размещён: 19.09.2016 10:49
Вопросы из категории :
32x32