で見せようとしてHtml
いTextView
ます。TextView
すべて正常に動作しますが、別の方法で画像を表示したいと考えています。
たとえば、ドラッグ アンド ドロップできるコンテナに各画像を入れたいとします。
これを実装する方法を知っている人はいますか?
ありがとう!
Upd : 一度WebView
に約 10 ~ 20 個の個別のビューを表示するため、は使用できませんActivity
。そして、これを実装するのに役立つとは思いません。
これが私が問題を解決した方法です。
主なアイデア: からすべてのスパンを調べて、Html.fromHtml(section.text)
を検索しImageSpan
ます。それが見つかったら、以前のすべてのスパンを 1 つのテキストとして設定し、画像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