android Emoji的處理

1.輸入監聽emoji,然後攔截掉

 /**
     * 將系統表情轉化爲字符串
     *
     * @param s
     * @return
     */
    public static boolean havaEmoji(String s) {
        int length = s.length();
        String context = "";
        //循環遍歷字符串,將字符串拆分爲一個一個字符
        for (int i = 0; i < length; i++) {
            char codePoint = s.charAt(i);
            //判斷字符是否是emoji表情的字符
            if (isEmojiCharacter(codePoint)) {
                //如果是就返回
               return true;
            }
        }
        return false;
    }


/**
     * 是否包含表情
     *
     * @param codePoint
     * @return 如果不包含 返回false,包含 則返回true
     */
 
    public static boolean isEmojiCharacter(char codePoint) {
        return !((codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA)
                || (codePoint == 0xD)
                || ((codePoint >= 0x20) && (codePoint <= 0xD7FF))
                || ((codePoint >= 0xE000) && (codePoint <= 0xFFFD)) || ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF)));


//使用
mBinding.etContent.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            }

            @Override
            public void afterTextChanged(Editable editable) {
                int index =  mBinding.etContent.getSelectionStart();//獲取光標位置
                if (havaEmoji(editable.toString())) {//包含表情就刪掉這個表情
                    editable.delete(index - 1, index);//刪除光標前的字符
                    return;
                }

            }
        });

 

 

2.不攔截掉emoji,直接約定轉換,前端轉成String,後臺接受時轉成emoji

//前臺轉換
 /**
     * 將系統表情轉化爲字符串
     *
     * @param s
     * @return
     */
    public static String getString(String s) {
        int length = s.length();
        String context = "";
        //循環遍歷字符串,將字符串拆分爲一個一個字符
        for (int i = 0; i < length; i++) {
            char codePoint = s.charAt(i);
            //判斷字符是否是emoji表情的字符
            if (isEmojiCharacter(codePoint)) {
                //如果是將以大括號括起來
                String emoji = "{" + Integer.toHexString(codePoint) + "}";
                context = context + emoji;
                continue;
            }
            context = context + codePoint;
        }
        return context;
    }

/**
     * 是否包含表情
     *
     * @param codePoint
     * @return 如果不包含 返回false,包含 則返回true
     */

    public static boolean isEmojiCharacter(char codePoint) {
        return !((codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA)
                || (codePoint == 0xD)
                || ((codePoint >= 0x20) && (codePoint <= 0xD7FF))
                || ((codePoint >= 0xE000) && (codePoint <= 0xFFFD)) || ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF)));
    }


//後臺轉換

/**
     * 將表情描述轉換成表情
     *
     * @param str
     * @return
     */
    public static String getEmoji(Context context, String str) {
        String string = str;
        String rep = "\\{(.*?)\\}";
        Pattern p = Pattern.compile(rep);
        Matcher m = p.matcher(string);
        while (m.find()) {
            String s1 = m.group().toString();
            String s2 = s1.substring(1, s1.length() - 1);
            String s3;
            try {
                s3 = String.valueOf((char) Integer.parseInt(s2, 16));
                string = string.replace(s1, s3);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return string;
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章