使用ImageSpan在TextView中添加多个微笑

时间:2018-09-28 06:53:23

标签: android textview spannablestring spannable

我正在尝试使用此代码在textview中添加多个微笑。
这是我的TextView。

<TextView
        android:id="@+id/textViewId"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:bufferType="spannable" />

这是添加笑脸功能。

public void addSmily() {
        int resource  = R.drawable.smily ;

        Spannable spannable = Spannable.Factory.getInstance().newSpannable(" ");

        Drawable d = ContextCompat.getDrawable(this, resource);
        d.setBounds(0, 0, 40, 40);
        ImageSpan smilySpan = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);

        spannable.setSpan(smilySpan, spannable.length()-1, spannable.length(), 0);

        sendText.append(spannable);
}

微笑添加得很好,但问题是当我添加的笑容不适合一行时,微笑的第一行变得不可见,它们从第二行开始。

App Privew 这就是发生的事情。请帮助我。

2 个答案:

答案 0 :(得分:1)

解决方案:

在按钮内尝试一下:

SpannableString ss = new SpannableString("abc");

Drawable d = ContextCompat.getDrawable(your_activity.this, R.drawable.your_smiley_drawable);
d.setBounds(0, 0, 40, 40);
ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);
ss.setSpan(span, 0, 3, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

edittext.append(ss);

注意:此外,EditText的输入类型必须为textMultiline。

尝试一下,在我的膝盖上工作,希望对您有帮助。

答案 1 :(得分:0)

您还可以在textview中通过Unicode设置笑脸。

how set emoji by unicode in a textview?

int unicode = 0x1F60A;

可以与哪个一起使用

public String getEmojiByUnicode(int unicode){
    return new String(Character.toChars(unicode));
}

因此Textview显示时没有Drawable

尝试使用http://apps.timwhitlock.info/emoji/tables/unicode

希望对您有帮助。