我正在处理电子邮件客户端,我需要显示HTML电子邮件并在某种EditText
视图中进行编辑。
我将电子邮件下载为HTML并将其显示在WebView
中 - 没关系。但是,当我想回复此电子邮件或编辑我的HTML签名时,我需要以某种EditText
显示它,它可以正确显示并编辑它。某种所见即所得......
有什么解决方案吗?谢谢
我错过了什么吗?
编辑:
所以我试着像这样使用ImageGetter:
mEmailEditText.setText(Html.fromHtml(mArgumentEmail.getmHtmlMessage(), getImageHTML(), null));
private Html.ImageGetter getImageHTML() {
Html.ImageGetter imageGetter = new Html.ImageGetter() {
public Drawable getDrawable(String source) {
try {
Drawable drawable = Drawable.createFromStream(new URL(source).openStream(), "src name");
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());
return drawable;
} catch(IOException exception) {
Log.v("IOException", exception.getMessage());
return null;
}
}
};
return imageGetter;
}
但它没有用......“不幸的是,电子邮件已经停止了。”在mEmailEditText.setText..
Caused by: android.os.NetworkOnMainThreadException ....
EDIT2:
所以我的最终工作结果如下:
public Html.ImageGetter getImageHTML() {
Html.ImageGetter imageGetter = new Html.ImageGetter() {
public Drawable getDrawable(String source) {
DownloadImageTask task = new DownloadImageTask();
try {
return task.execute(new String[] { source }).get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
return null;
}
};
return imageGetter;
}
private class DownloadImageTask extends AsyncTask<String, Void, Drawable> {
protected Drawable doInBackground(String... urls) {
for(String s : urls) {
try {
Drawable drawable = Drawable.createFromStream(new URL(s).openStream(), "src name");
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
return drawable;
} catch (IOException exception) {
Log.v("IOException", exception.getMessage());
return null;
}
}
return null;
}
@Override
protected void onPostExecute(Drawable drawable) {
super.onPostExecute(drawable);
}
}
除了电子邮件与WebView看起来不一样之外它还有效。当我想发送这封电子邮件时,更糟糕的是电子邮件看起来不像以前那样。
Spanned html = Html.fromHtml(..);
email.setmHtmlMessage(Html.toHtml(html));
是否有任何解决方案可以修复它并让它看起来像以前一样?
答案 0 :(得分:1)
使用Html.fromHtml(htmldata)
将html设为跨区字符串,并将其设置为edittext。
答案 1 :(得分:1)
getImageHTML
需要在单独的线程上运行。有很多方法可以做到这一点。对于此特定任务,我建议您使用AsyncTask
,因为您将更新UI组件。
此外,setText
应位于AsyncTask
&#39; onPostExecute
。