Как мне поддерживать разные размеры экрана в Windows Mobile? - PullRequest
2 голосов
/ 13 ноября 2009

Я пишу приложение Compact Framework для Windows Mobile 6.5. Приложение будет продаваться в магазине Windowsphone. Для этого я должен поддерживать различные размеры экрана и разрешения ... но как мне это сделать? Есть ли лучшая практика или так? Я использую в основном стандартные элементы управления, но фоновое изображение в главной форме ... Нужно ли сохранять его в любом разрешении и отображать его динамически, в зависимости от того, на каком устройстве работает мое приложение?

Спасибо за ваши предложения и помощь

Thomas

Ответы [ 3 ]

2 голосов
/ 13 ноября 2009

Я начну говорить, что это спорная тема.

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

Попытка решить все возможные разрешения одним и тем же слоем пользовательского интерфейса может показаться отличной идеей, но это может стать причиной катастрофы. Вы можете заставить его работать, но вы, скорее всего, в конечном итоге получите цепочку строк с кучей операторов IF-ELSE и SWITCH, которые смотрят на размеры пикселей, изменяют размеры элементов управления и перемещают объекты.

Если подумать, Google Карты (например, но не для любого приложения для iPhone) не поддерживают один и тот же пользовательский интерфейс на мобильном устройстве, в браузере вашего компьютера и т. Д. Если речь идет о разнице в размерах (разрешения, аналогичные настольной версии для мобильных ПК), то вам придется прокручивать разные слои пользовательского интерфейса в соответствии с моим предложением выше.

Святой Грааль - это так называемая Liquid Layout - WPF может помочь в этом, но, поскольку вы находитесь на компактной платформе, это исключено.

Я недавно задал очень похожий вопрос - вы можете посмотреть на него здесь, если хотите прочесть разные мнения .

0 голосов
/ 16 ноября 2009

Я недавно создал небольшое приложение, просто для того, чтобы попробовать. Мне нужно было отобразить фоновое изображение, поэтому я не мог использовать встроенные элементы управления, такие как Label и т. Д., Поскольку они не поддерживают прозрачный фон.

Я закончил рисовать весь интерфейс в событии Paint формы, используя GDI +.

Работа с различными разрешениями экрана оказалась довольно простой: интерфейс прототипируется для обычного экрана с разрешением 96 точек на дюйм (самый маленький), а затем все размеры масштабируются с использованием коэффициента, рассчитанного как 96 / actual_dpi. Вы можете получить фактическую настройку DPI экрана, используя найденный код здесь (немного старый, но все еще работающий). Затем я протестировал приложение со всеми разрешениями, предоставленными эмуляторами, и не нашел никаких проблем.

Предостережение: я «потратил» нижнюю часть экрана, чтобы ничего особенного не потребовалось для обращения к квадратным экранам и альбомной / портретной ориентации.

0 голосов
/ 16 ноября 2009

Это крепкий орешек. У меня были разумные результаты со следующим планом малых усилий. (Это ориентировано на Winform, кстати)

Самая большая проблема связана с разрешениями, которые на меньше , чем ожидалось. Поэтому создайте свои экраны как можно меньше и обращайте особое внимание на настройки якоря и стыковки. При отображении каждой формы установите ее в полноэкранный режим, и свойства привязки должны выполнять разумную работу по отображению вещей в здравом уме.

Это только начинает выглядеть глупо, если разрешение НАМНОГО больше, чем ожидалось.
Обратите внимание, что вы можете найти размер экрана текущей платформы с помощью вызова Screen.PrimaryScreen.Bounds.

...