размер шрифта отличается на IOS и Android - PullRequest
3 голосов
/ 09 марта 2012

В веб-просмотре на Android я загружаю HTML-файл, содержащий холст HTML5.При написании текста на холсте он крайне мал.Если я загружаю тот же HTML-файл в браузере ПК или даже в веб-представлении на IOS, он выглядит правильно.Насколько я могу судить, я отключил масштабирование, и холст заполняет весь веб-вид.Я ожидаю, что размер шрифта будет таким же, как при загрузке в других браузерах.Есть идеи?

В заголовке html-файла область просмотра объявлена ​​как:

<meta name='viewport' content='target-densitydpi=device-dpi,initial-scale=1.0,user-scalable=no'/>

, в теле html-файла холст объявлен как:

<canvas id='rtmc_canvas' style='position:relative; left:0px; top:0px;'/>

после загрузки страницы, я динамически корректирую холст, чтобы заполнить экран.

1 Ответ

4 голосов
/ 11 марта 2012

Вы устанавливаете плотность на 1.0 и говорите Android WebView вообще ничего не масштабировать, когда вы объявили свой видовой экран таким конкретным способом. Вы можете либо удалить эту декларацию области просмотра, которая затем приведет к масштабированию изображений, а также шрифтов, или вы можете изменить настройки размера текста в WebView на основе устройства Android, на котором пользователь запускает ваше приложение. Я предполагаю, что вы хотите сделать последнее.

Сначала вам нужно будет рассчитать плотность устройства. Вы можете сделать это с помощью этого кода:

float density = getResources().getDisplayMetrics().density;

Затем вы можете настроить размер шрифта для плотности.

Если плотность равна 1,0, то это средняя плотность (MDPI),> = 1,5 - высокая плотность (HDDP) и> = 2,0 - сверхвысокая плотность (XHDPI).

Если вы используете ICS, то у него есть хороший API для WebView:

webView.getSettings().setTextZoom(100 * density);

Если вы используете устройство, предшествующее ICS, то вам нужно использовать оператор if / else для проверки указанных выше плотностей, а затем использовать:

if (density < 1.5) {
    // mdpi:
    webView.getSettings().setTextSize(WebSettings.TextSize.NORMAL);
} else if ((density >= 1.5) && (density < 2.0)) {
    // hdpi:
    webView.getSettings().setTextSize(WebSettings.TextSize.LARGER);
} else {
    // xhdpi:
    webView.getSettings().setTextSize(WebSettings.TextSize.LARGEST);
}

Или, что еще лучше, вы можете обернуть оба из них в префикс ICS if else, проверив Build.VERSION.SDK_INT.

Вот еще кое-что о плотности: http://developer.android.com/guide/practices/screens_support.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...