Это старый и уже принятый вопрос, однако я уверен, что проблему можно решить более элегантно, используя javascript.
Храните файл html в папке с вашими ресурсами и окружайте текст, который вы хотите заменить, с элементами div с уникальными идентификаторами.
<html>
<head> ... <head>
<body>
Static text
<div id="replace1">replace me</div>
<div id="replace2">replace me too</div>
More static text ...
</body>
</html>
Теперь создайте яваскрипта функцию, которая заменит innerHtml из DIV с идентификатором:
function replace(id, newContent)
{
document.getElementById(id).innerHTML = newContent;
}
Эта функция будет лучше всего помещается непосредственно в HTML-файл, обновите раздел для <head>
выглядеть следующим образом:
<head>
...
<script type="text/javascript">
function replace(id, newContent)
{
document.getElementById(id).innerHTML = newContent;
}
</script>
</head>
Теперь мы должны вызвать функцию яваскрипта из из апи WebView Android:
WebView helpView = (WebView)findViewById(R.id.helpView);
helpView.getSettings().setJavaScriptEnabled(true);
helpView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
view.loadUrl("javascript:replace('replace1', 'new content 1')");
view.loadUrl("javascript:replace('replace2', 'new content 2')");
}
});
helpView.loadUrl("file:///android_asset/help.html");
Используя это, вы избегаете считывать потенциально большие данные в память и неоправданно выполнять дорогостоящие операции над ним.
Я хочу сделать это, чтобы потому что легче вносить изменения в record.html, чем в документ Java с 200 строками конкатенированной строки. Я пробовал это изменение и, кажется, давал мне правильную информацию, но когда я вызываю webMain.loadData (подробности, «текст/html», null); он дает ошибку страницы, не найденную. Страница, которую не находит, - это весь код в файле record.html. –
, если у вас есть тег . Я думаю, вам может понадобиться использовать loadDataWithBaseURL – reTs
Это оказалось ключом. Благодаря! –