2016-07-19 4 views
2

Ich versuche, Text anzuzeigen, der Emojis enthalten kann, die in einer iOS-Version der App erstellt wurden. Wenn wir diese Zeichen auf Android rendern, sehe ich [x] neben dem Emoji.Emoji Fitzpatrick (Hautfarbe) Zeichen in Android TextView entfernen

Gibt es eine Möglichkeit, das Android TextView zu erweitern, so dass Hauttonzeichen beim Rendern von Textansichten ignoriert werden.

ich einen regulären Ausdruck zu schaffen habe versucht, sie mit leeren Zeichen zu ersetzen, aber Android Studio beschwert sich, dass die Regex, weil die Hex-Zeichen Syntax wird nicht unterstützt und es sieht aus wie andere Escape-Zeichen werden auch gezupft

nicht gültig ist
replaceAll("[\\x{1f3fb}-\\x{1f3ff}]", "") 

Antwort

2

Ich denke, ich habe es endlich ausgearbeitet.

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

}