2016-07-19 7 views
2

iOS版のアプリで作成された絵文字を含むテキストを表示しようとしています。 Androidでこれらの文字をレンダリングすると、[x]が絵文字の隣に表示されます。Android TextViewでEmoji Fitzpatrick(スキントーン)文字を削除する

Textviewをレンダリングするときにスキントーン文字が無視されるようにAndroid TextViewを拡張する方法はありますか?

私は空の文字に置き換えるために正規表現を作成しようとしましたが、Androidのメーカーが進文字の構文がサポートされていないため、正規表現が有効でないと文句を言い、それはまた

取り除かれている他のエスケープ文字のように見えます
replaceAll("[\\x{1f3fb}-\\x{1f3ff}]", "") 

答えて

2

私は最終的にそれを解決したと思います。

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

}

関連する問題