html.toHtml fromHtml遇到嵌套標籤的轉換問題

遇到的問題是<a><img></a> 在html.fromHtml.html.toHtml後 發現<img><a></a> 錯位。
原因是toHtml中的問題,會把子標籤放到父標籤的外面。
解決:手動轉換  遇到<a><img></a>這種情況,轉換後<img><a></a>手動替換回<a><img></a>

    //利用反射修改mSpans裏面的imagespan和urlspan的順序
    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++){
                //如果第i是imgspan i+1是urlspan 並且兩個的startindex和endindex是相等的 則需要調換下順序
                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) : "");
發佈了32 篇原創文章 · 獲贊 8 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章