Категории
ТОП за месяц
onlinekniga.com » Компьютеры и Интернет » Программирование » Программирование мобильных устройств на платформе .NET Compact Framework - Иво Салмре

Программирование мобильных устройств на платформе .NET Compact Framework - Иво Салмре

Читать онлайн Программирование мобильных устройств на платформе .NET Compact Framework - Иво Салмре

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 120 121 122 123 124 125 126 127 128 ... 206
Перейти на страницу:

 buttonAnswer3.Enabled = enabledState;

 buttonAnswer4.Enabled = enabledState;

 buttonAnswer5.Enabled = enabledState;

}

//-----------------------------------------------------------------

//Задает текст в текстовом окне и кнопках,

//необходимых для формулирования вопросов.

//

//B случае практической реализации эта функция должна просматривать

//вопросы динамически

//-----------------------------------------------------------------

private void SetTextForVocabularyQuestion() {

 setQuestionText("What is the English word for 'der Mensch'?");

 buttonAnswer0.Text = "Four";

 buttonAnswer1.Text = "Person";

 buttonAnswer2.Text = "Three";

 buttonAnswer3.Text = "To Jump";

 buttonAnswer4.Text = "Newspaper";

 buttonAnswer5.Text = "Brother";

}

//Вызывается для оценки варианта ответа, выбранного пользователем

private void evaluateMultipleChoiceAnswer(Button buttonClicked, int selection) {

 //Примечание: в практической реализации правильный номер ответа

 //определяется динамически и не всегда соответствует "кнопке № 1"

 //Если выбранный пользователем вариант ответа не является правильным,

 //отменить доступ к нажатой кнопке

 if  (selection ! = 1) {

  //Выбранный вариант ответа является неправильным

  buttonClicked.Enabled = false;

 } else {

  //Пользователь выбрал правильный ответ, продолжить игру

  StateChangeForGameUI(GameUIState.waitForNextQuestion);

 }

}

//Абстракция, задающая текст вопросов

void setQuestionText(string textIn) {

 textBoxAskQuestion.Text = textIn;

}

//----------------------------------------------------------------

//ОБРАБОТЧИК СОБЫТИЙ: Пользователь желает увидеть следующий вопрос

//----------------------------------------------------------------

private void buttonAskQuestion_Click(object sender, System.EventArgs e) {

 SetTextForVocabularyQuestion();

 StateChangeForGameUI(GameUIState.waitForUserToStateKnowledge);

}

//---------------------------------------------------------------------

//ОБРАБОТЧИК СОБЫТИЙ:

//Пользователь желает ответить на отображенный вопрос и сообщить, какой

//наиболее сложный уровень является для него приемлемым

//---------------------------------------------------------------------

private void buttonShowAnswers_AdvancedVersion_Click(object sender, System.EventArgs e) {

 //Установить состояние игры для отображения вариантов выбора

 StateChangeForGameUI(GameUIState.waitForUserToAnswerMultipleChoice);

}

//---------------------------------------------------------------------

//ОБРАБОТЧИК СОБЫТИЙ:

//Пользователь желает ответить на отображенный вопрос и сообщить, какой

//наиболее легкий уровень является для него приемлемым

//---------------------------------------------------------------------

private void buttonShowAnswers_SimpleVersion_Click(object sender, System.EventArgs e) {

 //Установить состояние игры для отображения вариантов выбора

 StateChangeForGameUI(GameUIState.waitForUserToAnswerMultipleChoice);

}

//ОБРАБОТЧИК СОБЫТИЙ: Был выполнен щелчок на кнопке выбора варианта ответа

private void buttonAnswer0_Click(object sender, System.EventArgs e) {

 evaluateMultipleChoiceAnswer(buttonAnswer0, 0);

}

//ОБРАБОТЧИК СОБЫТИЙ: Был выполнен щелчок на кнопке выбора варианта ответа

private void buttonAnswer1_Click(object sender, System.EventArgs e) {

 evaluateMultipleChoiceAnswer(buttonAnswer1, 1);

}

//ОБРАБОТЧИК СОБЫТИЙ: Был выполнен щелчок на кнопке выбора варианта ответа

private void buttonAnswer2_Click(object sender, System.EventArgs e) {

 evaluateMultipleChoiceAnswer(buttonAnswer2, 2);

}

//ОБРАБОТЧИК СОБЫТИЙ: Был выполнен щелчок на кнопке выбора варианта ответа

private void buttonAnswer3_Click(object sender, System.EventArgs e) {

 evaluateMultipleChoiceAnswer(buttonAnswer3, 3);

}

//ОБРАБОТЧИК СОБЫТИЙ: Был выполнен щелчок на кнопке выбора варианта ответа

private void buttonAnswer4_Click(object sender, System.EventArgs e) {

 evaluateMultipleChoiceAnswer(buttonAnswer4, 4);

}

//ОБРАБОТЧИК СОБЫТИЙ: Был выполнен щелчок на кнопке выбора варианта ответа

private void buttonAnswer5_Click(object sender, System.EventArgs e) {

 evaluateMultipleChoiceAnswer(buttonAnswer5, 5);

}

//-------------------------------------------------

//ОБРАБОТЧИК СОБЫТИЙ: Вызывается при загрузке формы

//-------------------------------------------------

private void Form1_Load(object sender, System.EventArgs e) {

 //Задать статические свойства нашего визуального интерфейса

 SetStartControlPositionAndState();

 //Задать динамические свойства, исходя из того, в какое состояние

 //игры мы входим

 StateChangeForGameUI(GameUIState.startScreen);

}

Размещение элементов управления

В случае мобильных приложений расположение элементов пользовательского интерфейса играет большую роль как в отношении удобства пользования ими, так и в отношении возможности представить полностью всю информацию, которая необходима. Лишь в редких случаях имеет смысл простой перенос пользовательского интерфейса с настольного компьютера на мобильное устройство; лично я не могу привести ни одного примера, когда бы это сработало на практике. Экранное разрешение и модели использования в этих двух случаях настолько радикально отличаются друг от друга, что попытки втиснуть пользовательский интерфейс и модель использования приложения, свойственные настольным компьютерам, в форм-фактор мобильного устройства — это рецепт неудачи. В лучшем случае вы получите неуклюжее посредственное приложение. Гораздо целесообразнее проанализировать, ранжировать по приоритетам и явно выписать перечень всех сценариев настольного компьютера, выполнение которых на мобильном устройстве является необходимым, а также сценариев, уникальных для мобильного устройства, которые вы хотели бы поддерживать, и лишь после этого создавать пользовательский интерфейс приложения, подчинив его вытекающим из всего вышесказанного требованиям.

To же самое можно сказать и о простом переносе приложения с одного устройства на другое, если их форм-факторы различны; такой "буквальный" перенос пользовательского интерфейса имеет смысл осуществлять лишь в редких случаях. Даже если большая часть логики приложения и может быть перенесена в неизменном виде, гораздо лучше составить явный перечень ключевых сценариев и специфических для устройства моделей использования и начать создавать пользовательский интерфейс, который удовлетворяет этим запросам, с нуля.

Экранное пространство — ценная вещь

Чем меньше экран устройства, тем больше внимания необходимо уделять его эффективному использованию. Рациональное управление экранным пространством не имеет ничего общего с попытками разместить как можно больше элементов управления в пределах экрана; на самом деле почти всегда следует стремиться к обратному.

Физические возможности мобильных устройств ограничены, и поэтому вы не сможете разместить большинство элементов управления приложений для настольных компьютеров на экране мобильного устройства даже в том случае, если уменьшите шрифты наполовину, сведете размеры элементов управления до тех минимальных пределов, при которых ими еще можно пользоваться, и расположите их как можно ближе друг к другу так, как если бы они являлись элементами игры "Tetris". Ясно, что требуется совершенно иной подход. Наилучшие интерфейсы для мобильных устройств не страдают загруженностью экрана деталями, они разрежены и элегантны; как это ни парадоксально, создается впечатление, что имеющимся свободным пространством они могли бы еще и с кем-то поделиться. Вместо того чтобы пытаться разместить на экране мобильного устройства все элементы управления сразу, целесообразнее подойти к проблеме с другой стороны и задаться вопросом: "Каков тот абсолютный минимум информации и элементов управления, которые должны присутствовать на экране, чтобы пользователь имел возможность сделать следующий шаг?" Приступая к проектированию компоновки пользовательского интерфейса мобильного приложения, попытайтесь найти ответы на следующие вопросы:

■ Каков тот минимальный набор информации, которая должна отображаться на экране, и тот минимальный набор элементов управления, которые требуются для навигации? Можно ли дополнительно уменьшить этот набор путем разделения доступного экрана между несколькими менее насыщенными состояниями пользовательского интерфейса, которые могут отображаться по отдельности?

■ Должны ли размеры элементов управления изменяться при переходе от одного состояния пользовательского интерфейса к другому? Часто оказывается желательным сократить или увеличить размеры элемента пользовательского интерфейса, чтобы скрыть или показать более подробную информацию, если это позволяют размеры экрана.

1 ... 120 121 122 123 124 125 126 127 128 ... 206
Перейти на страницу:
На этой странице вы можете бесплатно читать книгу Программирование мобильных устройств на платформе .NET Compact Framework - Иво Салмре.
Комментарии