在使用Html.fromText时,将包含图像对齐到基础

时间:2013-02-04 21:37:37

标签: android

我有这样的代码。

Button b = findViewById(R.id.button);
mImgGetter = new MiniImageGetter(this);
b.setText(Html.fromText("<img src=\"foo\"> FOO!"),mImgGetter,null)

其中MiniImageGetter是一个类:

class MiniImageGetter implements ImageGetter {
    private Context mContext;

    public MiniImageGetter(Context c) {
        mContext =c;
    }

    @Override
    public Drawable getDrawable(String source) {
         Drawable d = mContext.getResources().getDrawableR.drawable.foo);
         d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
         return d;

    }
}

但是图像都与Button文本的底部对齐,而不是与文本的基线对齐。

2 个答案:

答案 0 :(得分:1)

我没有找到真正的解决方案,但作为解决方法,这有效:

private SpannableString getSpannableString(int image, int buttontext) {
    Drawable d = getResources().getDrawable(image); 

    SpannableString ss = new SpannableString("  " + getString(buttontext));
    d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); 
    ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE); 
    ss.setSpan(span, 0, 1, Spannable.SPAN_INCLUSIVE_INCLUSIVE);
    return ss;
}

然后使用

 b.setText(getSpannableString(R.drawable.foo,"Text with image in front of it"));

答案 1 :(得分:0)

您可以使用此功能将内嵌图像与文本对齐。

public Drawable getDrawable(String source) {
    BitmapDrawable d = ...;
    d.setBounds(new Rect(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight() + 5));
    d.setGravity(Gravity.TOP);
    return d;
}