0

TextViewで画像をスマイリーとして表示したい。文字列を取得し、ImageSpans を CharSequence に追加して、:-)などのテキストの絵文字をグラフィカル バージョンに置き換えるメソッドがあります。 ここに画像の説明を入力

public Spannable addSmileySpans(CharSequence text) {
    SpannableStringBuilder builder = new SpannableStringBuilder(text);

    Matcher matcher = mPattern.matcher(text);
    while (matcher.find()) {
        int resId = mSmileyToRes.get(matcher.group());
        builder.setSpan(new ImageSpan(mContext, resId),
                        matcher.start(), matcher.end(),
                        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    }

    return builder;
}

次に、アダプターで使用します。

viewHolder.txtReceivedBody.setText(parser.addSmileySpans(message.body));

また、ここで定義されている TextView 要素:

<TextView
            android:id="@+id/txtReceivedBody"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toRightOf="@+id/imgReceivedDirection"
            android:layout_marginRight="30dp"
            android:background="@drawable/selector_conversation_received"
            android:minHeight="40dp"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"
            android:paddingTop="4dp"
            android:paddingBottom="4dp"
            android:textSize="18sp"
            android:autoLink="all"
            android:gravity="right"/>

残念ながら、TextView に画像を表示せず、メインの文字列のみを表示しました。それを解決するにはどうすればよいですか?

4

2 に答える 2

0

あなたのパターンを提供します

私のパターンは[画像のID]です

textview.setText(addSmileySpans(context,edit_text.getText()));

public CharSequence addSmileySpans(Context context, CharSequence msg) {
SpannableStringBuilder builder = new SpannableStringBuilder(your_recieved_message);
Pattern pattern = Pattern.compile("\\[([^\\[\\]]+)\\]");
if( pattern != null )
{
    Matcher matcher = pattern.matcher( your_recieved_message );
    int matchesSoFar = 0;
    while( matcher.find() )
    {
        CharSequence cs =matcher.group().subSequence(1, matcher.group().length()-1);
        int value = Integer.parseInt(cs.toString());
        System.out.println("pattern is::"+matcher.group().subSequence(1, matcher.group().length()-1)); 
        int start = matcher.start() - (matchesSoFar * 2);
        int end = matcher.end() - (matchesSoFar * 2);
        Drawable Smiley = context.getResources().getDrawable(value);
        Smiley.setBounds(0, 0,15,15);
        builder.setSpan(new ImageSpan(Smiley), start + 1, end - 1, 0 );
        builder.delete(start, start + 1);
        builder.delete(end - 2, end -1);
        matchesSoFar++;

    }
}
return builder;
}
于 2014-12-15T12:36:30.040 に答える