簡體   English   中英

以不同的方式在TextView中處理HTML中的圖像

[英]Handling images in HTML In TextView in a different way

我正在嘗試在TextView顯示Html 一切正常,但是我想以不同的方式在TextView中顯示圖像。

例如,我希望每個圖像都在容器中,可以將其拖放。

有誰知道實現此目的的任何方法?

謝謝!

Upd :我不能使用WebView ,因為我將在同一Activity上同時顯示大約10-20個獨立視圖。 而且我認為這不會幫助我實現這一目標。

這就是我解決問題的方式。

主要思想:遍歷Html.fromHtml(section.text)所有范圍並搜索ImageSpan 找到后,將所有先前的跨度設置為一個TextView文本,為圖像創建ImageView ,然后繼續搜索。

碼:

new AsyncTask<String, Integer, List<Object>>() {
    @Override
    protected List<Object> doInBackground(String... params) {
        List<Object> res = new ArrayList<Object>();
        Spanned in = Html.fromHtml(section.text);

        Object[] spans = in.getSpans(0, Integer.MAX_VALUE, Object.class); // get all spans
        int lastImageSpanPosition = 0; // it's end position of image span
        for (int i = 0; i < spans.length; i++) { // itarete searching ImageSpan
            Object span = spans[i];

            if (span instanceof ImageSpan) {
                int spanStart = in.getSpanStart(span); // If you;ve found one

                if (lastImageSpanPosition == spanStart) 
                    continue; // check if image is first span (avoid creation of empty spans).
                res.add(new SpannableStringBuilder(in.subSequence(lastImageSpanPosition, spanStart))); // add all previous spans as a single Spannable object

                ImageSpan imageSpan = (ImageSpan) span;
                String imageUrl = imageSpan.getSource();
                if (!imageUrl.startsWith("http"))
                    imageUrl = "http:" + imageUrl;

                res.add(new ImageSpan(null, imageUrl)); // add separate span for image
                lastImageSpanPosition = in.getSpanEnd(span);
            }

            if (i < spans.length - 1 && !containsImageSpan(spans, i + 1)) { // to not lose text in the end
                res.add(new SpannableStringBuilder(in.subSequence(lastImageSpanPosition, in.getSpanEnd(spans[spans.length - 1]))));
                break;
            }
        }
        return res;
    }

    @Override
    protected void onPostExecute(List<Object> objects) {
        for (Object object : objects) {
            View v = null;

            if (object instanceof ImageSpan) { // create separate views for each span
                NetworkImageView networkImageView = new NetworkImageView(getContext());
                networkImageView.setImageUrl(((ImageSpan) object).getSource(), App.get().getImageLoader());
                v = networkImageView;
            } else {
                TextView textView = new TextView(getContext());
                textView.setText((CharSequence) object);
                v = textView;
            }
            holder.sectionTextViewsContainer.addView(v);
        }

    }
}.execute(section.text);

編輯:添加了containsImageSpan方法

private boolean containsImageSpan(Object[] spans, int index) {
    for (int i = index; i < spans.length; i++) {
        if (spans[i] instanceof ImageSpan) {
            return true;
        }
    }
    return false;
}

根據HTML類的文檔,我不確定您能否實現所需的功能。 看看http://developer.android.com/reference/android/text/Html.html

如果您確實要使用HTML,建議您使用Webview。 否則,您可以使用本機拖放。 檢查官方培訓: http : //developer.android.com/guide/topics/ui/drag-drop.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM