Действительно ли возможно отобразить встроенные изображения от HTML в Android TextView?

Учитывая следующий HTML:

<p>This is text and this is an image <img src="http://www.example.com/image.jpg" />.</p>

Действительно ли возможно сделать рендеринг изображения? При использовании этого отрывка: mContentText.setText(Html.fromHtml(text));, Я получаю голубое поле с черными границами, ведя меня, чтобы полагать, что TextView имеет некоторую идею того, каков тег img.

83
задан Gunnar Lium 19 May 2010 в 12:30
поделиться

3 ответа

Если вы посмотрите документацию для Html.fromHtml (text) , вы увидите, что там написано:

Any ] теги в HTML будут отображаться как общее замещающее изображение, которое затем ваша программа может пройти и заменить реальными изображениями.

Если вы не хотите выполнять эту замену самостоятельно, вы можете использовать другой Html.fromHtml () метод , который принимает Html.TagHandler и Html.ImageGetter в качестве аргументов, а также текст для синтаксического анализа.

В вашем случае вы можете проанализировать null как Html.TagHandler , но вам нужно будет реализовать свой собственный Html.ImageGetter , поскольку его нет » t реализация по умолчанию.

Однако проблема, с которой вы столкнетесь, заключается в том, что Html.ImageGetter должен работать синхронно, и если вы загружаете изображения из Интернета, вы, вероятно, захотите сделать это асинхронно. Если вы можете добавить любые изображения, которые хотите отображать в качестве ресурсов в своем приложении, ваша реализация ImageGetter станет намного проще. Вам может сойти с рук что-то вроде:

private class ImageGetter implements Html.ImageGetter {

    public Drawable getDrawable(String source) {
        int id;

        if (source.equals("stack.jpg")) {
            id = R.drawable.stack;
        }
        else if (source.equals("overflow.jpg")) {
            id = R.drawable.overflow;
        }
        else {
            return null;
        }

        Drawable d = getResources().getDrawable(id);
        d.setBounds(0,0,d.getIntrinsicWidth(),d.getIntrinsicHeight());
        return d;
    }
};

Вы, вероятно, захотите придумать что-нибудь более умное для сопоставления исходных строк с идентификаторами ресурсов.

125
ответ дан 24 November 2019 в 08:51
поделиться

Вы также можете написать свой собственный парсер для получения URL всех изображений, а затем динамически создавать новые imageviews и передавать им url.

1
ответ дан 24 November 2019 в 08:51
поделиться

Кроме того, если вы все-таки хотите произвести замену самостоятельно, вам следует искать персонажа [].

Но если вы используете Eclipse, он испугается, когда вы введете эту букву в оператор [replace], сообщив вам, что он конфликтует с Cp1252 - это ошибка Eclipse. Чтобы исправить это, перейдите в

Окно -> Настройки -> Общие -> Рабочая область -> Кодировка текстового файла,

и выберите [UTF-8]

1
ответ дан 24 November 2019 в 08:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: