2

嘿,我在为那个 Smily 代码找到确切的 Imotion(Facebook) 时遇到了一些问题。我输入了我的 Snippat 代码:

private static final HashMap<String, Integer> smilyRegexMap = new HashMap<String, Integer>();

static{
        smilyRegexMap.put( ":-)" , R.drawable.fb_smile);
        smilyRegexMap.put( ":)",R.drawable.fb_smile);
        smilyRegexMap.put( ":-]" , R.drawable.fb_smile);

        smilyRegexMap.put( ":-(", R.drawable.fb_frown);
        smilyRegexMap.put( ":(" , R.drawable.fb_frown);
        smilyRegexMap.put( ":-[" , R.drawable.fb_frown);

        smilyRegexMap.put( ":-P" , R.drawable.fb_tounge);
        smilyRegexMap.put( ":p", R.drawable.fb_tounge);

        smilyRegexMap.put( ":-D" , R.drawable.fb_grin);
        smilyRegexMap.put( ":D" , R.drawable.fb_grin);

        smilyRegexMap.put( ":-O" , R.drawable.fb_gasp);
        smilyRegexMap.put( ":*" , R.drawable.fb_gasp);

        smilyRegexMap.put( ";-)" , R.drawable.fb_wink);
        smilyRegexMap.put( ";)" , R.drawable.fb_wink);
        smilyRegexMap.put( ":putnam:" , R.drawable.fb_putnam);   
    }

//================================================= =========

public static CharSequence addSmileySpans(Context ch, CharSequence your_recieved_message)
{
    //smilyRegexMap = new HashMap<Integer, String>();

    System.out.println("==In Spannable Function..........");
    SpannableStringBuilder builder = new SpannableStringBuilder(your_recieved_message);

    System.out.println("==================Size of Smily  : "+ smilyRegexMap.size());
    @SuppressWarnings("rawtypes")
    Iterator it = smilyRegexMap.entrySet().iterator();
    while (it.hasNext()) {
        @SuppressWarnings("rawtypes")
        Map.Entry pairs = (Map.Entry) it.next();

        Pattern mPattern = Pattern.compile((String) pairs.getKey(),Pattern.CASE_INSENSITIVE);
        Matcher matcher = mPattern.matcher(your_recieved_message);

        while (matcher.find()) {
            Bitmap smiley = BitmapFactory.decodeResource(ch.getResources(), ((Integer) pairs.getValue()));
            builder.setSpan(new ImageSpan(smiley), matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
}   
    return builder;
}

我有调用这个函数:

addSmileySpans(this,"Hi i m Happy :-)  ;-)  :p   :putnam:  ");

===>>我的问题是当我输入时:putnam:然后得到类似的结果

嗨我快乐在此处输入图像描述 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述在此处输入图像描述

//=============================================

Ookeyyy ...现在我使用此代码:::

Bitmap smiley = BitmapFactory.decodeResource(ch.getResources(), ((Integer) pairs.getValue()));
Object[] spans = builder.getSpans(matcher.start(), matcher.end(), ImageSpan.class);
if (spans == null || spans.length == 0) {
   builder.setSpan(new ImageSpan(smiley), matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}

但它给出了一些错误::

当 Enter :putnam: 其结果是 在此处输入图像描述utnam:

4

1 回答 1

2
  1. 您应该按照从“最大微笑代码”到“最小微笑代码”的顺序对微笑进行排序。
  2. 当您找到下一个模式时,只需检查这段文本是否已经被 span 覆盖:
Object[] spans = builder.getSpans(matcher.start(), matcher.end(), Object.class);
if (spans == null || spans.length == 0) {
    //add new image span here
}
于 2012-07-18T09:56:21.223 回答