遇到的问题是<a><img></a> 在html.fromHtml.html.toHtml后 发现<img><a></a> 错位。
原因是toHtml中的问题,会把子标签放到父标签的外面。
解决:手动转换 遇到<a><img></a>这种情况,转换后<img><a></a>手动替换回<a><img></a>
private Editable changeSpansOrder(Editable editTextSpannable){
try {
final Field m = editTextSpannable.getClass().getDeclaredField("mSpans");
m.setAccessible(true);
final Object[] mSpans = (Object[])(m.get(editTextSpannable));
final int length = mSpans.length;
Object imgSpanObj, urlSpanObj;
for(int i = 0 ;i < length-1; i++){
imgSpanObj = mSpans[i];
urlSpanObj = mSpans[i+1];
if((imgSpanObj != null && imgSpanObj instanceof ImageSpan) && (urlSpanObj != null && urlSpanObj instanceof URLSpan)){
if((editTextSpannable.getSpanStart(imgSpanObj) == editTextSpannable.getSpanStart(urlSpanObj)) && (editTextSpannable.getSpanEnd(imgSpanObj) == editTextSpannable.getSpanEnd(urlSpanObj))){
mSpans[i] = urlSpanObj;
mSpans[i+1] = imgSpanObj;
}
}
}
m.set(editTextSpannable, mSpans);
}catch (Exception ex){
ex.printStackTrace();
}
return editTextSpannable;
}
mReceivers = new String[]{mReceiversTv.getText().toString()};
Editable editTextSpannable = mContentEt.getText();
editTextSpannable = changeSpansOrder(editTextSpannable);
String content = Html.toHtml(editTextSpannable) + signContentTxt + (mQuoteOriginalChk.isChecked() ? (null == mLastEmail ? "" : mEmailDivideTxt + mLastEmail.htmlBody) : "");