遇到的問題是<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) : "");