Ввод данных
Ввод данных — это один из важных компонентов графического интерфейса пользователя (GUI). Хотя реализация и не слишком сложна, она включает в себя множество компонентов, и её понимание может быть затруднительным. В этой статье мы рассмотрим внутреннюю архитектуру ввода данных в AWTK.
1. Виртуальная клавиатура
Во встраиваемых системах обычно нет физической клавиатуры, поэтому необходимо реализовать виртуальную клавиатуру на экране. В AWTK виртуальная клавиатура представляет собой обычное окно, а кнопки и элементы управления с кандидатами на ввод определяются с помощью файлов описания пользовательского интерфейса AWTK. Это позволяет легко реализовать различные типы виртуальных клавиатур. Файлы описания размещаются в каталоге res/raw/ui и имеют имена, начинающиеся с kb_.
По сравнению с обычными окнами, виртуальные клавиатуры имеют следующие отличия:
Для удобства использования в AWTK был представлен класс окна keyboard. При разработке учитывались следующие проблемы:
Решение: на виртуальной клавиатуре можно разместить несколько страниц, которые можно переключать при нажатии кнопок. Имена кнопок начинаются с «page:», что означает переключение на указанную страницу при нажатии. Например, нажатие на следующую кнопку приведёт к переключению на страницу цифровых символов:
<button name="page:symnum" style="1:highlight" w="15%" text="123"/>
Решение: предоставить разные виртуальные клавиатуры для разных типов ввода данных, каждый со своим файлом описания пользовательского интерфейса. Соответствие между типами ввода и файлами описания пользовательского интерфейса следующее:
Тип ввода | Файл описания клавиатуры | Описание |
---|---|---|
INPUT_PHONE | kb_phone | Номер телефона |
INPUT_INT | kb_int | Целое число |
INPUT_FLOAT | kb_float | Число с плавающей запятой |
INPUT_UINT | kb_uint | Неотрицательное целое число |
INPUT_UFLOAT | kb_ufloat | Неотрицательное число с плавающей запятой |
INPUT_HEX | kb_hex | Шестнадцатеричное число |
INPUT_EMAIL | kb_ascii | Адрес электронной почты |
INPUT_PASSWORD | kb_ascii | Пароль |
Другое | kb_default |
Решение: определить функцию кнопки по её имени:
Имя кнопки | Функция |
---|---|
return | Клавиша Enter |
action | Пользовательская кнопка |
backspace | Клавиша Backspace |
tab | Клавиша Tab |
space | Пробел |
close | Закрыть виртуальную клавиатуру |
clear | Очистить содержимое редактора |
cancel | Восстановить содержимое редактора |
back | Вернуться к предыдущему окну |
back_to_home | Вернуться в окно home |
Префикс key: | Значение клавиши |
Префикс hard_key: | Имитация физической клавиатуры |
Префикс page: | Переключиться на страницу |
Префикс opt: | Выбрать несколько символов, нажать для перехода к следующему, тайм-аут отправляет символ (используется для реализации ввода в виде сетки 3x3) |
Решение: Предоставить элемент управления кандидатами на ввод. Его можно добавить в файл описания виртуальной клавиатуры при необходимости.
Подробности см. в документации по клавиатуре keyboard.
2. Интерфейс и реализация ввода данных
AWTK как универсальный графический интерфейс должен учитывать следующие ситуации:
Чтобы справиться с этими ситуациями, AWTK предоставляет три различных реализации, которые могут быть включены в зависимости от потребностей:
3. Механизм ввода данных и его реализация
Механизм ввода данных отвечает за преобразование нажатий клавиш пользователем в набор кандидатов на ввод (эти кандидаты на ввод будут отображаться в элементе управления кандидата на ввод на виртуальной клавиатуре). Существует множество механизмов ввода данных, и разные языки также имеют разные механизмы ввода данных. См. документацию по механизмам ввода данных механизмы ввода данных.
4. Редактор
Редактору нужно только запрашивать открытие или закрытие механизма ввода данных при получении или потере фокуса.
5. Управление открытием, закрытием и переключением виртуальной клавиатуры с помощью клавиш
На устройствах без сенсорных экранов может потребоваться использовать клавиши для открытия, закрытия и переключения механизма ввода данных, иначе виртуальная клавиатура будет отображаться после отображения и не сможет быть закрыта.
Мы можем переопределить следующие макросы для достижения этой функции.
#ifndef TK_KEY_CLOSE_INPUT_METHOD
#define TK_KEY_CLOSE_INPUT_METHOD TK_KEY_F7
#endif /*TK_KEY_CLOSE_INPUT_METHOD*/
#ifndef TK_KEY_OPEN_INPUT_METHOD
#define TK_KEY_OPEN_INPUT_METHOD TK_KEY_F8
#endif /*TK_KEY_OPEN_INPUT_METHOD*/
#ifndef TK_KEY_TOGGLE_INPUT_METHOD
#define TK_KEY_TOGGLE_INPUT_METHOD TK_KEY_F9
#endif /*TK_KEY_TOGGLE_INPUT_METHOD*/
6. Прочее
#define TK_IM_MAX_CANDIDATE_CHARS 32
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )