Шрифт:
При использовании изображений в приложении очень важно правильно выбрать для них формат хранения. Для крохотных битовых образов (например, 8×8 пикселей) применение сжатия смысла не имеет, поскольку они и так малы. В случае более крупных изображений можно сэкономить довольно много места по сравнению с несжатыми форматами (например, *.BMP), используя сжатые форматы с потерями (например, *.JPG) или без потерь (например, *.PNG). Несжатые фоновые изображения с размерами порядка размеров экрана могут значительно увеличить общий размер приложения. Особое внимание следует уделять выбору форматов хранения для изображений, в которых один цвет будет считаться прозрачным во время выполнения; в таких случаях необходимо использовать только форматы со сжатием без потерь. Сжатие с потерями часто позволяет сэкономить много места, но этого удается достигнуть лишь ценой ослабления контроля за каждым отдельным пикселем изображения; вы получаете лишь приближенное изображение. Растровые изображения с областями прозрачности требуют точного указания цвета каждого пикселя.
Резюме
Создание отличного пользовательского интерфейса — это трудная, однако увлекательная задача проектирования. Во-первых, вы должны либо адаптировать идею своего проекта к привычным схемам использования и форм фактору выбранного вами целевого устройства, либо выбрать подходящий тип мобильных устройств, который соответствует проектным целям. Мобильные устройства значительно отличаются от настольных компьютеров и лэптопов своим интерфейсом и стереотипом использования. Также и различные классы устройств значительно отличаются друг от друга. Попытки разработки пользовательского интерфейса, способного хорошо работать на различных устройствах, — это гарантия того, что он будет плохо работать на каждом из них. Чтобы обеспечить наилучшие условия работы для пользователя, определяйте для себя целевые мобильные устройства и оптимизируйте интерфейс мобильного приложения применительно к каждому конкретному случаю.
В процессе принятия проектных решений очень важно учитывать, будут ли пользователи работать с интерфейсом вашего приложения с помощью одной или двух рук. Часто это решение диктуется особенностями оборудования, которое выбрано вами в качестве целевого; например, с сенсорными экранами обычно работают, используя две руки, а с мобильными телефонами — обычно одну. Явно укажите в своем основном документе проекта, для какого варианта использования предназначено приложение, и следите за учетом этого требования на протяжении всего процесса проектирования и разработки. При проектировании интерфейсов, которыми пользователь будет оперировать одной рукой, важно учитывать единообразие способов и простоту навигации в пределах интерфейса при помощи щелчков; не заставляйте пользователя при перемещении по часто встречающимся навигационным маршрутам менять кнопки. В процессе навигации по вашему приложению пользователь не должен быть вынужденным переводить взгляд с экрана устройства на клавиатуру; это отвлекает его и нарушает плавность течения его мыслей.
Огромное влияние на проект будут оказывать размеры экрана, являющегося целевым для вашего мобильного приложения. Для небольших экранов целесообразно использовать пользовательские интерфейсы, основанные на списках; в случае экранов большего размера, при работе с которыми применяются сенсорная площадка или мышь, лучшим решением для навигации между экранами будет метафора диалоговых окон-вкладок. Распределите функциональность своего мобильного приложения между несколькими специализированными экранами. Тщательно продумайте, какую информацию вы хотите отобразить на каждом из экранов и как облегчить навигацию между ними. Приложения для настольных компьютеров обычно отображают несколько абзацев информации одновременно. В приложениях для Pocket PC чаще встречается вариант отображения одного абзаца информации с одновременным отображением ссылок на другие абзацы. В смартфонах обычно отображаются сводные списки, с помощью которых пользователь может углубляться в структуру списков и просматривать каждую порцию информации по отдельности.
Поскольку мобильные устройства обычно не имеют полноценной клавиатуры, в большинстве случае быстрый ввод текста не является их сильной стороной. Поэтому, если требуется ввод данных, целесообразно не жалеть усилий на оптимизацию производительности труда пользователя при вводе распространенных разновидностей данных. Часто можно облегчить пользователю ввод таких специфических данных, как даты, числа, валюта, адреса или любые другие данные, отличающиеся от свободного текста, за счет разработки специализированных интерфейсов с крупными кнопками или адаптированных элементов управления. Обеспечить ускоренный ввод специфических данных могут также такие внешние устройства, как устройства для считывания штрих-кодов или устройства для распознавания речи и визуальных образов, однако ваше мобильное приложение должно предлагать пользователю и параллельные возможности ввода той же информации на случай сбоя упомянутых внешних устройств, что неизбежно случается.
Процесс разработки чрезвычайно ускоряется при использовании программных эмуляторов устройств, но эмуляторы не в состоянии заменить реальные устройства при тестировании удобства использования приложения. Эмулятора, выполняющегося на лэптопе, совершенно недостаточно для того, чтобы оценить истинные эксплуатационные характеристики приложения при его выполнении на физическом мобильном устройстве. Навигационные возможности, средства ввода, вес устройства, удобство работы и условия обзора данных — вот те параметры, точная оценка которых возможна только при тестировании приложения на реальном оборудовании.
В процессе написания кода пользовательского интерфейса для мобильного приложения очень важно структурировать код таким образом, чтобы внесение изменений в ранее разработанные участки кода, если это потребуется, не составляло труда. Получение окончательного варианта пользовательского интерфейса будет сопровождаться постоянным возвратом к пересмотру ранее принятых вами схем компоновки и навигации. Чтобы эти изменения можно было легко вносить, ваш код должен быть гибким. Для изоляции обработки событий одних элементов управления от обновления других могут эффективно использоваться централизация управления кодом пользовательского интерфейса в конечном автомате и интерфейсные функции, что позволит существенно повысить гибкость вашего проекта. Крайне важно избегать распределения ответственности за управление пользовательским интерфейсом между различными частями приложения; чем больше степень централизации кода, управляющего пользовательским интерфейсом, тем проще его будет модифицировать, если в этом возникнет необходимость. Использование вспомогательных классов для группирования родственных функций пользовательского интерфейса, например, всех обработчиков событий элементов управления, расположенных на данной вкладке, также способствует изоляции кода пользовательского интерфейса от остального кода. Надежно абстрагированный интерфейс между функциональной логикой приложения и логикой уровня представления крайне важен для повышения гибкости проекта. Дополнительным преимуществом создания надежно инкапсулированного кода пользовательского интерфейса является то, что это значительно облегчает перенос вашего мобильного приложения на мобильные устройства других классов.