首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ImageSpan被切断/对齐不正确

ImageSpan被切断/对齐不正确
EN

Stack Overflow用户
提问于 2010-07-15 14:56:32
回答 5查看 9.4K关注 0票数 10

我正在使用以下代码实现表情符号:

代码语言:javascript
复制
            builder.setSpan(new ImageSpan(mContext, resId, ImageSpan.ALIGN_BASELINE),
                        start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE );

结果(构建器)被设置为TextView的文本。如果跨度被文本包围,也就是当开始>0,结束< length - 1时,它工作得很好,但如果周围没有文本,图像就会被截断(上移)。我该怎么解决这个问题呢?

非常感谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-07-19 17:58:31

好吧,由于没有建议,我将同时使用以下解决方案:如果没有文本-使用ALIGN_BOTTOM标志,否则使用ALIGN_BASELINE...

票数 3
EN

Stack Overflow用户

发布于 2012-06-15 02:38:57

在您的解决方案之后,这里是我用来代替ImageSpan的自定义DynamicDrawableSpandraw()方法(从DynamicDrawableSpan复制并修改)确保在与基线对齐之前存在文本。

代码语言:javascript
复制
class StickerSpan extends DynamicDrawableSpan {
    Drawable mDrawable;

    public StickerSpan(Context context, Bitmap bitmap) {
        super(DynamicDrawableSpan.ALIGN_BASELINE);
        setBitmap(context, bitmap);
    }

    public void setBitmap(Context context, Bitmap bitmap) {
        mDrawable = new BitmapDrawable(context.getResources(), bitmap);
        int width = mDrawable.getIntrinsicWidth();
        int height = mDrawable.getIntrinsicHeight();
        mDrawable.setBounds(0, 0, width > 0 ? width : 0, height > 0 ? height : 0); 
    }

    @Override
    public Drawable getDrawable() {
        return mDrawable;
    }

    @Override
    public void draw(Canvas canvas, CharSequence text,
                     int start, int end, float x, 
                     int top, int y, int bottom, Paint paint) {
        Drawable b = mDrawable;
        canvas.save();

        int transY = bottom - b.getBounds().bottom;
        if (mVerticalAlignment == ALIGN_BASELINE) {
            int textLength = text.length();
            for (int i = 0; i < textLength; i++) {
                if (Character.isLetterOrDigit(text.charAt(i))) {
                    transY -= paint.getFontMetricsInt().descent;
                    break;
                }
            }
        }

        canvas.translate(x, transY);
        b.draw(canvas);
        canvas.restore();
    }
}
票数 7
EN

Stack Overflow用户

发布于 2011-03-23 15:28:57

我也遇到了这个问题,找不到合适的解决方案。我使用的解决方法如下所示:

代码语言:javascript
复制
if(message.length() == 1){
//This is a hack to get past an android bug that misaligns ImageSpan's when they are all alone.
    message += " ";
}
builder = new SpannableStringBuilder(message);
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3253148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档