删除Android TextView中的表情符号Fitzpatrick(肤色)字符

删除Android TextView中的表情符号Fitzpatrick(肤色)字符,android,textview,emoji,emoji-tones,Android,Textview,Emoji,Emoji Tones,我试图显示一些文本,其中可能包含在iOS版本的应用程序上创建的表情符号。当我们在Android上渲染这些字符时,我会在表情符号旁边看到[x] 是否有办法扩展Android TextView,以便在呈现TextView时忽略肤色字符 我曾尝试创建一个正则表达式,用空字符替换它们,但Android Studio抱怨正则表达式无效,因为不支持十六进制字符语法,而且看起来其他转义字符也被删除了 replaceAll("[\\x{1f3fb}-\\x{1f3ff}]", "") 我想我终于解决了 pub

我试图显示一些文本,其中可能包含在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;
    }
}
公共类CustomTextView扩展了AppCompatTextView{
私有静态最终字符串FITZPATRICK_PREFIX=“\uD83C”;
公共CustomTextView(上下文){
这个(上下文,空);
}
公共CustomTextView(最终上下文、最终属性集属性){
这(上下文,属性,0);
}
公共CustomTextView(最终上下文、最终属性集属性、最终int defStyleAttr){
super(上下文、attrs、defStyleAttr);
}
@凌驾
public void setText(final CharSequence text,final BufferType){
super.setText(stripFitzpatrickCharacters(text==null?“:text.toString()),类型);
}
公共静态字符串stripFitzpatrickCharacters(@NonNull final String){
if(Build.VERSION.SDK_INT
}