1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/zlgopen-awtk

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
input_method.md 11 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 22:52 91e8897

Ввод данных

Ввод данных — это один из важных компонентов графического интерфейса пользователя (GUI). Хотя реализация и не слишком сложна, она включает в себя множество компонентов, и её понимание может быть затруднительным. В этой статье мы рассмотрим внутреннюю архитектуру ввода данных в AWTK.

1. Виртуальная клавиатура

Во встраиваемых системах обычно нет физической клавиатуры, поэтому необходимо реализовать виртуальную клавиатуру на экране. В AWTK виртуальная клавиатура представляет собой обычное окно, а кнопки и элементы управления с кандидатами на ввод определяются с помощью файлов описания пользовательского интерфейса AWTK. Это позволяет легко реализовать различные типы виртуальных клавиатур. Файлы описания размещаются в каталоге res/raw/ui и имеют имена, начинающиеся с kb_.

По сравнению с обычными окнами, виртуальные клавиатуры имеют следующие отличия:

  • При нажатии на них фокус редактирования исходного редактора не меняется.
  • По умолчанию они не принимают события нажатия клавиш (если только не задано свойство grab_keys как true) и события ввода текста.

Для удобства использования в AWTK был представлен класс окна keyboard. При разработке учитывались следующие проблемы:

  1. На виртуальной клавиатуре есть несколько страниц. Некоторые предназначены для ввода китайских символов, некоторые — для ввода прописных букв, некоторые — для ввода строчных букв, некоторые — для ввода цифр, а некоторые — для ввода знаков.

Решение: на виртуальной клавиатуре можно разместить несколько страниц, которые можно переключать при нажатии кнопок. Имена кнопок начинаются с «page:», что означает переключение на указанную страницу при нажатии. Например, нажатие на следующую кнопку приведёт к переключению на страницу цифровых символов:

<button name="page:symnum" style="1:highlight" w="15%" text="123"/>
  1. Для разных редакторов ввода требуются разные виртуальные клавиатуры. Например, когда редактор числовых значений получает фокус, должна отображаться только виртуальная клавиатура для числового ввода.

Решение: предоставить разные виртуальные клавиатуры для разных типов ввода данных, каждый со своим файлом описания пользовательского интерфейса. Соответствие между типами ввода и файлами описания пользовательского интерфейса следующее:

Тип ввода Файл описания клавиатуры Описание
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
  1. Кнопки на виртуальной клавиатуре выполняют различные функции. Некоторые используются для переключения страниц на виртуальной клавиатуре, некоторые используются для ввода текста, некоторые отправляют текст на обработку механизму ввода данных, а некоторые используются для удаления последнего введённого символа.

Решение: определить функцию кнопки по её имени:

Имя кнопки Функция
return Клавиша Enter
action Пользовательская кнопка
backspace Клавиша Backspace
tab Клавиша Tab
space Пробел
close Закрыть виртуальную клавиатуру
clear Очистить содержимое редактора
cancel Восстановить содержимое редактора
back Вернуться к предыдущему окну
back_to_home Вернуться в окно home
Префикс key: Значение клавиши
Префикс hard_key: Имитация физической клавиатуры
Префикс page: Переключиться на страницу
Префикс opt: Выбрать несколько символов, нажать для перехода к следующему, тайм-аут отправляет символ (используется для реализации ввода в виде сетки 3x3)
  1. Иногда требуется отображать кандидатов на ввод, иногда нет.

Решение: Предоставить элемент управления кандидатами на ввод. Его можно добавить в файл описания виртуальной клавиатуры при необходимости.

Подробности см. в документации по клавиатуре keyboard.

2. Интерфейс и реализация ввода данных

AWTK как универсальный графический интерфейс должен учитывать следующие ситуации:

  • Ввод данных не требуется.
  • Ресурсов низкоуровневых встраиваемых устройств недостаточно для включения ввода данных.
  • Мобильные устройства или ПК имеют собственный механизм ввода данных и не требуют предоставления AWTK механизма ввода данных.
  • На средних и высокоуровневых встраиваемых устройствах есть ресурсы для включения механизма ввода данных и требуется механизм ввода данных.

Чтобы справиться с этими ситуациями, AWTK предоставляет три различных реализации, которые могут быть включены в зависимости от потребностей:

  • null реализация просто предоставляет пустую реализацию без включения механизма ввода данных или виртуальной клавиатуры.
  • sdl реализация инкапсулирует собственный механизм ввода данных (реализация SDL имеет некоторые проблемы и требует дальнейшего улучшения).
  • default реализация предоставляет собственную реализацию, отвечающую за открытие и закрытие виртуальной клавиатуры и создание механизма ввода данных.

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. Прочее

  • Измените максимальное количество кандидатов на ввод и повторно определите макрос TK_IM_MAX_CANDIDATE_CHARS.
#define TK_IM_MAX_CANDIDATE_CHARS 32

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/zlgopen-awtk.git
git@api.gitlife.ru:oschina-mirror/zlgopen-awtk.git
oschina-mirror
zlgopen-awtk
zlgopen-awtk
master