Масштабирование WebView - PullRequest
       26

Масштабирование WebView

0 голосов
/ 24 апреля 2018

Я не хочу менять масштаб webView. Это означает, что я знаю, как включить масштабирование и тому подобное, когда изменяется только видимая часть страницы («увеличено»), как с

webView.getSettings().setSupportZoom(true);
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setDisplayZoomControls(false);

Я также не хочу менять размер шрифта, как это возможно с getSettings().setTextZoom(zoom).

То, чего я хочу добиться, - это то же увеличение, которое возможно в браузерах для компьютера, например. Fire Fox. Здесь вы можете увеличить, например, с помощью CTRL + + . Но это не меняет масштаб и не меняет только размер шрифта. Он масштабирует все, в то же время перестраивая содержимое страницы в соответствии с новым пространством, доступным в увеличенном окне браузера. Возможно ли что-то подобное с Android ViewView?


Несколько изображений, чтобы показать, что я хочу:

Вид по умолчанию: default

Масштабированное представление: scaled

Вид увеличенного шрифта: font zoomed

Что я хочу: optimal

1 Ответ

0 голосов
/ 01 мая 2018

Я нашел два возможных решения этой проблемы:

1. JS Zoom

Этот параметр загружает фрагмент JS на текущий сайт веб-представления и обновляет свойство стиля текущего тела. Фрагмент Javascript выглядит так:

function Zoom(value)
{
    document.body.style.zoom = value;
}

Я использую loadUrl метод webView для загрузки этого фрагмента. Недостатком этого метода является то, что вы должны загружать фрагмент каждый раз, когда страница обновляется. Я сделал это, обновляя масштаб всякий раз, когда вызывается onPageFinished webView. Это имеет тот недостаток, что масштабирование не применяется напрямую, а только после завершения загрузки страницы.

2. Изменение DPI

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

wm density [value]

Где значение - это новая плотность экрана. Он должен выполняться с правами суперпользователя, что также является основным недостатком этого решения. Еще одним недостатком является то, что он довольно медленный (для обновления DPI требуется около секунды).

...