При разработке приложений для Android в Delphi мы можем использовать различные типы виртуальных клавиатур для ввода данных. Например, мы можем предоставить пользователю возможность ввода только цифр, букв, номеров телефона и так далее.
| Основная информация по примеру | ||
| Исходник официального примера и документация | DocWiki | |
Этот демонстрационный пример показывает каким образом можно изменять тип виртуальной клавиатуры для различных элементов управления в приложении для Android.
Внешний вид демонстрационного приложения представлен на рисунке ниже:
Элементы управления располагаются на внутри компонента TVertScrollBox, который используется в примере для позиционирования элементов управления относительно виртуальной клавиатуры Android.
Использование виртуальных клавиатур в Android
Тип виртуальной клавиатуры (Alphabet, NumberPad и другие) хранится в свойстве KeyboardType элементов управления редактирования.
Чтобы изменить тип виртуальной клавиатуры, необходимо выбрать элемент управления для редактирования в конструкторе форм и выбрать нужный тип виртуальной клавиатуры в свойстве KeyboardType в Инспекторе объектов:
Все доступные типы виртуальных клавиатур представлены таблице ниже:
| TVirtualKeyboardType | Описание |
| Alphabet | Буквенно-цифровая клавиатура для общего ввода текста. В Android клавиатура выглядит так же, как клавиатура по умолчанию, но без предложений (T9) |
| Default | Клавиатура по умолчанию |
| EmailAddress | Буквенно-цифровая клавиатура для ввода адресов электронной почты, обычно с клавишами для . и @. |
| NamePhonePad | Буквенно-цифровая клавиатура для общего ввода текста, включая телефонную панель. |
| NumbersAndPunctuation | Клавиатура, которая обеспечивает числовой ввод и знаки препинания. |
| NumberPad | Цифровая клавиатура (10 клавиш) |
| PhonePad | Клавиатура для ввода телефонного номера |
| URL | Клавиатура для ввода URL |
Демонстрационный пример
В примере Delphi показаны различные типы клавиатур для мобильных устройств, а также, дополнительно, продемонстрировано как изменять положение элементов управления при помощи TVertScrollBox для более удобной работы с приложением при вводе информации в поля редактирования (TEdit). Для этого, у главной формы приложения определены обработчики событий OnFormFocusChanged, FormVirtualKeyboardHidden и OnFormVirtualKeyboardShown:
procedure TVKBaseForm.FormFocusChanged(Sender: TObject); begin UpdateKBBounds; end; procedure TVKBaseForm.FormVirtualKeyboardHidden(Sender: TObject; KeyboardVisible: Boolean; const Bounds: TRect); begin FKBBounds.Create(0, 0, 0, 0); FNeedOffset := False; RestorePosition; end; procedure TVKBaseForm.FormVirtualKeyboardShown(Sender: TObject; KeyboardVisible: Boolean; const Bounds: TRect); begin FKBBounds := TRectF.Create(Bounds); FKBBounds.TopLeft := ScreenToClient(FKBBounds.TopLeft); FKBBounds.BottomRight := ScreenToClient(FKBBounds.BottomRight); UpdateKBBounds; end;
При этом методы UpdateKBBounds и RestorePosition выглядят следующим образом:
procedure TVKBaseForm.UpdateKBBounds; var LFocused : TControl; LFocusRect: TRectF; begin FNeedOffset := False; if Assigned(Focused) then begin LFocused := TControl(Focused.GetObject); LFocusRect := LFocused.AbsoluteRect; LFocusRect.Offset(VertScrollBox1.ViewportPosition); if (LFocusRect.IntersectsWith(TRectF.Create(FKBBounds))) and (LFocusRect.Bottom > FKBBounds.Top) then begin FNeedOffset := True; MainLayout1.Align := TAlignLayout.Horizontal; VertScrollBox1.RealignContent; Application.ProcessMessages; VertScrollBox1.ViewportPosition := PointF(VertScrollBox1.ViewportPosition.X, LFocusRect.Bottom - FKBBounds.Top); end; end; if not FNeedOffset then RestorePosition; end; procedure TVKBaseForm.RestorePosition; begin VertScrollBox1.ViewportPosition := PointF(VertScrollBox1.ViewportPosition.X, 0); MainLayout1.Align := TAlignLayout.Client; VertScrollBox1.RealignContent; end;
При подготовке статьи использовалась информация со следующих ресурсов:
- Официальный репозиторий демонстрационных примеров Delphi на SourceForge
- Информация по работе с виртуальными клавиатурами мобильных устройств на сайте Embarcadero


