【问题标题】:Stripping out Emoji Fitzpatrick (skin tone) characters in Android TextView在 Android TextView 中去除 Emoji Fitzpatrick(肤色)字符
【发布时间】:2016-07-19 09:53:19
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: android textview emoji emoji-tones


    【解决方案1】:

    我想我终于解决了。

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

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-30
      • 2015-01-02
      • 1970-01-01
      • 2016-08-25
      • 1970-01-01
      • 2016-08-31
      相关资源
      最近更新 更多