Лучший способ обработки разных размеров экрана одной и той же категории на Android

Существуют следующие категории размеров экрана Android: маленький, нормальный, ....

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

Есть HTC Legend с разрешением 320 x 480 (ширина x высота) и Samsung Galaxy с разрешением 480 x 800, оба выбрали отображение с нормальным разрешением (поскольку у меня нет большого)

Каков наилучший способ справиться с этим? Мне действительно нужно определить все экраны и в большом формате?

На самом деле проблема не в ширине — одни и те же определения работают для маленьких, нормальных и больших, — но вот высота действительно создает проблемы.

Вы просто делаете экран масштабируемым для работы по высоте?

Спасибо за любые идеи!


person user387184    schedule 27.10.2011    source источник


Ответы (2)


Если вы хотите, вы можете дополнительно указать размер экрана по минимальному размеру. Вот каталог для размещения макетов для экранов с наименьшей шириной 600dp:

layout-sw600dp

Хотя я думаю, что это может работать только для >= 3.2 :(. Однако может быть умный способ воспользоваться приоритетом селектора. Читать.

Я знаю, что это немного поздно рекомендовать, но в целом попробуйте использовать линейную компоновку, веса и 9-патч, чтобы убедиться, что вашу компоновку можно использовать для всех разрешений. В идеале вам нужен только другой макет для xlarge по сравнению с остальными.

person Ian    schedule 27.10.2011

Одна вещь, которую нужно сделать, это использовать изображения с 9 патчами везде, где это возможно. Другой подход заключается в настройке механизма на стороне сервера, который сообщит клиенту, какую папку ресурсов использовать. Таким образом, при первом запуске после загрузки клиент отправляет серверу строку User Agent телефона. Сервер определяет наилучший размер активов и отправляет эту информацию обратно клиенту, который кэширует ее. Отсюда клиент знает, какую папку использовать.

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

person omermuhammed    schedule 27.10.2011
comment
Я не уверен, что полностью понимаю, но вы имеете в виду, что я не могу использовать стандартные инструменты на телефоне/Android, но должен выполнить настройку сервера/клиента для своего приложения? Я думал, что когда приложение запускается, оно проверяет, какой макет экрана лучше всего подходит каждый раз, когда приложение запускается (это какой-то дешевый сервер/клиент) — это то, что вы имеете в виду? - person user387184; 28.10.2011
comment
Мой ответ - ОДИН способ сделать это. Я уверен, что есть и другие способы. И да, этот механизм не является стандартным для Android, но довольно стандартным для мобильной разработки. Так что вы правы, здесь не используются стандартные инструменты Android. Мой механизм полностью отличается от того, что делает приложение в контексте Android. Надеюсь, это поможет понять это. - person omermuhammed; 28.10.2011