Android: замена HTML-тегов в WebView - PullRequest
2 голосов
/ 06 марта 2011

Мое приложение для Android загружает статьи в формате HTML-тегов и отображает их в WebView.Проблема, с которой я столкнулся, заключается в том, что в некоторых статьях есть автоматически сгенерированные графики, которые достаточно велики и не соответствуют веб-представлению.(Обратите внимание, что я не хочу использовать горизонтальную прокрутку).Моя идея состоит в том, чтобы сохранить каждое вхождение тега 'div', который содержит такой граф, а затем заменить его ссылкой "<a href='unique_id_of_div_tag'>Show graph</a>".Имея что-то подобное, вы увидите ссылку вместо графика.Когда пользователь нажимает на него, он открывает новую активность с графиком (я бы обрабатывал пользовательские нажатия с помощью WebViewClient и метода shouldOverrideUrlLoading)

Тег 'div', содержащий информацию о графике, имеет структуру, аналогичную следующей:

<div class="graph">
   <div>Header</div>
   <div>Graph body</div>
   <div>Graph footer</div>
</div>

(и я не могу его контролировать)

Подводя итог, я хочу иметь возможность сохранить содержимое <div class="graph">...</div> и заменить его на <a href="">...</a>.Как мне этого добиться?

Спасибо, marqs

Ответы [ 2 ]

3 голосов
/ 06 марта 2011

Это можно сделать с помощью следующего:

Pattern tags = Pattern.compile ("</?[^>]+>");
Matcher match = tags.matcher (yourContent); // here you specify the string you want to modify (HTML)
String result = match.replaceAll("");

Таким образом вы удаляете все теги, но сохраняете содержимое в вашей HTML-строке.

Подробнее о Pattern and Matcher здесь .

EDIT:

Чтобы удалить только ссылки (якоря) из строки, напишите следующее вместо первой строки:

Pattern tags = Pattern.compile ("</?[a]{1}[^>]+>");

Вы можете удалить произвольную строку, просто заменив регулярное выражение другим.

EDIT2:

Я совершенно не понял вашего вопроса. Два раза:)

Вы можете удалить все теги <div class="graph">, выполнив что-то вроде этого:

    Pattern tags = Pattern.compile ("<div class=\"graph\">[^(</div>)]+</div>");

После этого замените все эти [[DIV]] заполнители на все, что вы хотите. Тем не менее, этот подход не будет работать, если у вас есть div с графиком и некоторым содержимым внутри. Поэтому в этом случае, я думаю, будет лучше разделить весь ваш контент на <div class=graph>, а затем проверить каждый DIV внутри каждого элемента, чтобы проверить, есть ли в нем график.

Я не знаю, можно ли это сделать только с помощью регулярных выражений, поэтому необходимо будет использовать более утомительный и подверженный ошибкам подход. Но вы хотите что-то действительно конкретное, так что иногда этого стоит ожидать:)

0 голосов
/ 06 марта 2011

Не очень хорошо знаком с Android или Java, но исходя из чисто html / js-точки зрения, не могли бы вы выполнить некоторую предварительную обработку HTML-кода перед его отображением в WebView?Например, если вы заранее знаете, как будет выглядеть граф html, не могли бы вы просто спрятать его в html, вставить перед ним тег привязки и показать его с помощью javascript?

Iя не знаю код для обработки или поиска / вставки строк в Android, но итоговый HTML-код, который вы фактически показываете пользователю, может выглядеть следующим образом: «display: none;»добавлен в прилагаемый div графического объекта:

Ссылка найдет элемент, на который есть ссылка в своем href, и затем покажет его.

<a href="#div-of-graph" onclick="document.getElementById(this.href.substring(this.href.indexOf('#')+1)).style.display='block';return false;">show</a>
<div id="div-of-graph" style="display:none;"><img src="the-graph.gif" /></div>
...