Android的ImageGetter图像重叠的文本 [英] Android ImageGetter images overlapping text

查看:136
本文介绍了Android的ImageGetter图像重叠的文本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图加载HTML块到一个TextView,包括图像,使用

I'm trying to load a block of HTML into a TextView, including images, using

URLImageParser p = new URLImageParser(articleBody, this);
Spanned htmlSpan = Html.fromHtml(parsedString, p, null);

parsedString是HTML,顺便说一句。无论如何,它加载了,但图像没有创建任何空间,让他们坐,因此他们最终重叠在它们上面的文字。这是我的URLImageParser文件:

parsedString is the HTML, by the way. Anyway, it loads up, but the images aren't having any space created for them to sit in, so they end up overlapping the text above them. Here's my URLImageParser file:

public class URLImageParser implements Html.ImageGetter {
Context c;
View container;

/***
 * Construct the URLImageParser which will execute AsyncTask and refresh the container
 * @param t
 * @param c
 */
public URLImageParser(View t, Context c) {
    this.c = c;
    this.container = t;
}

public Drawable getDrawable(String source) {
    URLDrawable urlDrawable = new URLDrawable();

    // get the actual source
    ImageGetterAsyncTask asyncTask = 
        new ImageGetterAsyncTask( urlDrawable);

    asyncTask.execute(source);

    // return reference to URLDrawable where I will change with actual image from
    // the src tag
    return urlDrawable;
}

public class ImageGetterAsyncTask extends AsyncTask<String, Void, Drawable>  {
    URLDrawable urlDrawable;

    public ImageGetterAsyncTask(URLDrawable d) {
        this.urlDrawable = d;
    }

    @Override
    protected Drawable doInBackground(String... params) {
        String source = params[0];
        return fetchDrawable(source);
    }

    @Override
    protected void onPostExecute(Drawable result) {
        // set the correct bound according to the result from HTTP call
        Log.d("height",""+result.getIntrinsicHeight());
        Log.d("width",""+result.getIntrinsicWidth());
        urlDrawable.setBounds(0, 0, 0+result.getIntrinsicWidth(), 0+result.getIntrinsicHeight()); 

        // change the reference of the current drawable to the result
        // from the HTTP call
        urlDrawable.drawable = result;

        // redraw the image by invalidating the container
        URLImageParser.this.container.invalidate();
    }

    /***
     * Get the Drawable from URL
     * @param urlString
     * @return
     */
    public Drawable fetchDrawable(String urlString) {
        try {
            URL aURL = new URL(urlString);
            final URLConnection conn = aURL.openConnection(); 
            conn.connect(); 
            final BufferedInputStream bis = new BufferedInputStream(conn.getInputStream()); 
            final Bitmap bm = BitmapFactory.decodeStream(bis);
            Drawable drawable = new BitmapDrawable(bm);
            drawable.setBounds(0,0,bm.getWidth(),bm.getHeight());
            return drawable;
        } catch (Exception e) {
            return null;
        } 
    }
}

}

任何想法?由于一吨。

推荐答案

有没有你需要将其加载到一个文本视图一个特别的原因吗?你能不能使用的WebView 的呢?

Is there a particular reason you need to load it into a text view? Could you just use a WebView instead?

如果您不能使用Webviews,那么最好的解决方案是不把图像文本视图。把图像的ImageView的。 TextViews没有任何你需要搞清楚在哪里把图像和文字相对于彼此的布局引擎的能力。他们不是ViewGroups(如LinearLayout中或RelativeLayout的),因此没有内部布局指定的功能。如果你真的不想使用的WebView(与所有漂亮的布局引擎的东西它),你将必须找出如何安排个人TextViews和ImageViews自己。

If you can't use Webviews, then the best solution is to not put the images in your text view. Put the images in an ImageView. TextViews don't have any of the layout engine capabilities you need to figure out where to put images and texts in relation to each other. They're not ViewGroups (like LinearLayout or RelativeLayout) and thus have no internal layout specifying capabilities. If you really don't want to use a webview (and all the nice layout engine stuff it has), you're going to have to figure out how to arrange individual TextViews and ImageViews yourself.

这篇关于Android的ImageGetter图像重叠的文本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆