Android TextViewがHTMLタグをサポートすることは秘密ではありません。 中でも、タグはサポートされており、ImageGetterクラスを使用して処理されます。 また、ローカル画像ファイルの表示に問題がない場合、TextViewでプログラムからリモート図面をロードしようとすると、Androidバージョン3.0以降でNetworkOnMainThreadExceptionが発生します。 判明したように、検索エンジンにはこの問題を解決するための情報がほとんどなく、提案されたすべてのソリューションが実行可能ではありません。 ただし、実用的なソリューションが存在します。
解決策は、図面を読み込んだ後、TextViewにSpannedを再インストールすることです。 ダウンロードした画像をキャッシュして、フィールドが表示されるたびに読み込まないようにします(実装は異なる場合があります)。 したがって、ImageGetterの2つの実装を作成する必要があります。
static final Map<String, WeakReference<Drawable>> mDrawableCache = Collections.synchronizedMap(new WeakHashMap<String, WeakReference<Drawable>>()); @Override public void onCreate(Bundle savedInstanceState) {
ここで、画像のダウンロードに直接関与するAsyncTaskからクラスを定義します。
class ImageDownloadAsyncTask extends AsyncTask<Void, Void, Void> { private String source; private String message; private TextView textView; public ImageDownloadAsyncTask(String source, String message, TextView textView) { this.source = source; this.message = message; this.textView = textView; } @Override protected Void doInBackground(Void... params) { if (!mDrawableCache.containsKey(source)) { try {
もちろん、マニフェストに
android.permission.INTERNET
権限を設定することを忘れないでください。
ソース /
プロジェクト全体