#java #android #html #android-layout
#java #Android #HTML #android-макет
Вопрос:
Я работаю над почтовым клиентом, и мне нужно отобразить электронное письмо в формате HTML и отредактировать его в каком-то EditText
виде.
Я загружаю электронную почту в формате HTML и показываю ее в WebView
— все в порядке. Но когда я хочу ответить на это электронное письмо или отредактировать свою подпись, которая находится в HTML, мне нужно отобразить ее в каком-то EditText
виде, который может отображать ее должным образом и редактировать.. Какой-то WYSIWYG..
Есть ли какое-либо решение? Спасибо
Я что-то упускаю?
Редактировать:
Итак, я попытался использовать 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 ....
РЕДАКТИРОВАТЬ2:
Итак, мой окончательный рабочий результат выглядит следующим образом:
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));
Есть ли какое-либо решение, чтобы исправить это и сделать так, чтобы оно выглядело как раньше?
Ответ №1:
Сделайте html составной строкой с помощью Html.fromHtml(htmldata)
и установите для этого значение edittext.
Комментарии:
1. Спасибо, но в электронном письме не отображаются изображения .. И когда я хочу получить этот HTML-текст ответа из EditText и отправить его, я получаю не форматированное HTML-электронное письмо, а просто неформатированный текст из EditText..
2. оно не будет обрабатывать само изображение, мы должны передать Html. Изображение убедитесь, что я покажу изображение. используйте
fromHtml(String source, Html.ImageGetter imageGetter, Html.TagHandler tagHandler)
и передайте imagegetter, который будет отображать изображение.
Ответ №2:
getImageHTML
Необходимо запустить в отдельном потоке. Это можно сделать несколькими способами. Для этой конкретной задачи я рекомендую использовать AsyncTask
, поскольку вы будете обновлять компонент пользовательского интерфейса.
Кроме того, setText
должно быть в AsyncTask
‘s onPostExecute
.