Как заставить браузер Android WVGA прекратить масштабирование моих изображений?

Я разрабатываю HTML-страницу для отображения в браузерах Android. Рассмотрим этот простой пример страницы:

<html>
<head><title>Simple!</title>
</head>
<body>
<p><img src="http://sstatic.net/so/img/logo.png"></p>
</body>
</html>

На стандартных телефонах с HVGA (320x480) оно выглядит нормально, но на HDPI WVGA размерах (480x800 или 480x854) встроенный браузер автоматически масштабирует изображение; это выглядит некрасиво.

Я читал, что должен иметь возможность использовать этот тег, чтобы заставить браузер прекратить масштабирование моей страницы:

<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; minimum-scale=1.0; user-scalable=0;" />

... но все, что нужно сделать, это отключить масштабирование пользователя (кнопки масштабирования исчезают); на самом деле это не мешает браузеру масштабировать мое изображение. Настройка коэффициентов масштабирования (установка их всех на 2,0 или 0,5) не дает никакого эффекта.

Как я могу заставить браузер WVGA прекратить масштабирование моих изображений?


person Dan Fabulich    schedule 09.05.2010    source источник
comment
Я заметил, что установка параметра «Масштаб по умолчанию» в настройках браузера на «Дальний» отключит масштабирование изображения, но я не могу ожидать, что все мои пользователи будут делать это.   -  person Dan Fabulich    schedule 09.05.2010
comment
В Android 2.1/уровень API 7 добавлен API для установки масштаба по умолчанию. webview.getSettings().setDefaultZoom()   -  person Morgan Christiansson    schedule 12.10.2010
comment
Для целей этого вопроса я создаю веб-сайт, а не приложение для Android с WebView, поэтому я не могу использовать Android API.   -  person Dan Fabulich    schedule 13.10.2010


Ответы (2)


А, нашел, просматривая исходный код Android. Появилась новая специфичная для Android "цель параметр -densityDpi", доступный в метатеге "viewport"; насколько я могу судить, это совершенно недокументировано, за исключением комментария о регистрации!

Добавьте поддержку dpi для WebView.

В метатеге «viewport» вы можете указать «target-densityDpi». Если он не указан, используется значение по умолчанию, 160 точек на дюйм на сегодняшний день. Тогда масштабный коэффициент 1,0, указанный в теге окна просмотра, означает 100 % для G1 и 150 % для Sholes. Если вы установите «target-densityDpi» на «device-dpi», то масштабный коэффициент 1,0 означает 100% как для G1, так и для Sholes.

Реализован интерфейс Safari для window.devicePixelRatio и css media query device-pixel-ratio.

Поэтому, если вы используете «device-dpi» и изменяете css для размера шрифта и источника изображения в зависимости от window.devicePixelRatio, вы можете получить лучшую страницу на Sholes/Passion.

Вот список параметров для «target-densityDpi».

device-dpi: используйте собственное разрешение устройства в качестве целевого значения dpi. низкое разрешение: 120 dpi среднее dpi: 160 dpi, которое также является значением по умолчанию на сегодняшний день high dpi: 240 dpi: мы принимаем любое число от 70 до 400 в качестве допустимого целевого значения dpi.

person Dan Fabulich    schedule 09.05.2010
comment
Поддержка target-densityDpi была добавлена ​​в Android Source 21 сентября 2009 г. и, похоже, не была включена, по крайней мере, в Android 1.6. Он был добавлен в этот коммит: android.git.kernel.org/?p=platform/external/ - person Morgan Christiansson; 12.10.2010
comment
@morganchristiansson Это правда, но в дикой природе очень мало HDPI-устройств Android 1.6. У LG есть несколько телефонов, которые соответствуют этому профилю... У этих людей, вероятно, будет плохой опыт. - person Dan Fabulich; 13.10.2010
comment
Я ориентируюсь на LDPI/маленькие устройства, такие как HTC Tattoo и SE X10 Mini, которые, к сожалению, работают под управлением Android 1.6. - person Morgan Christiansson; 13.10.2010
comment
Не уверен, что это имеет значение, но в документах ничего из этого не пишется с заглавной буквы — это target-densitydpi, а не target-densityDpi, как в ‹meta name=viewport content=target-densitydpi=device-dpi /› developer.android.com/reference/android/webkit/WebView.html - person DyeA; 02.12.2011

Теперь это часть документации API для WebView: http://developer.android.com/reference/android/webkit/WebView.html

См. раздел Создание веб-страниц для поддержки различной плотности экрана.

person user141682    schedule 09.07.2010