Android ImageGetter 图像重叠文本 [英] Android ImageGetter images overlapping text
问题描述
我正在尝试使用
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;
}
}
}
}
有什么想法吗?非常感谢.
Any ideas? Thanks a ton.
推荐答案
有什么特殊原因需要将它加载到文本视图中吗?你能改用 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 没有任何布局引擎功能,您需要弄清楚将图像和文本放在哪里相互关联.它们不是 ViewGroup(如 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屋!