уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

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

Основная информация по примеру
Исходник официального примера и документация SourceForge DocWiki

Этот демонстрационный пример показывает каким образом можно изменять тип виртуальной клавиатуры для различных элементов управления в приложении для Android.

Внешний вид демонстрационного приложения представлен на рисунке ниже:

Элементы управления располагаются на внутри компонента TVertScrollBox, который используется в примере для позиционирования элементов управления относительно виртуальной клавиатуры Android.

Для того, чтобы показать виртуальную клавиатуру пользователю, Вы можете воспользоваться стандартным действием в FM2 

Использование виртуальных клавиатур в Android

Тип виртуальной клавиатуры (Alphabet, NumberPad и другие) хранится в свойстве KeyboardType элементов управления редактирования.

Чтобы изменить тип виртуальной клавиатуры, необходимо выбрать элемент управления для редактирования в конструкторе форм и выбрать нужный тип виртуальной клавиатуры в свойстве KeyboardType в Инспекторе объектов:

Все доступные типы виртуальных клавиатур представлены  таблице ниже:

TVirtualKeyboardType  Описание
Alphabet Буквенно-цифровая клавиатура для общего ввода текста. В Android клавиатура выглядит так же, как клавиатура по умолчанию, но без предложений (T9)
Default Клавиатура по умолчанию
EmailAddress Буквенно-цифровая клавиатура для ввода адресов электронной почты, обычно с клавишами для . и @.
NamePhonePad Буквенно-цифровая клавиатура для общего ввода текста, включая телефонную панель.
NumbersAndPunctuation Клавиатура, которая обеспечивает числовой ввод и знаки препинания.
NumberPad Цифровая клавиатура (10 клавиш)
PhonePad Клавиатура для ввода телефонного номера
URL Клавиатура для ввода URL

Демонстрационный пример

В примере Delphi показаны различные типы клавиатур для мобильных устройств, а также, дополнительно, продемонстрировано как изменять положение элементов управления при помощи TVertScrollBox для более удобной работы с приложением при вводе информации в поля редактирования (TEdit). Для этого, у главной формы приложения определены обработчики событий OnFormFocusChangedFormVirtualKeyboardHidden и 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;

При подготовке статьи использовалась информация со следующих ресурсов:

  1. Официальный репозиторий демонстрационных примеров Delphi на SourceForge
  2. Информация по работе с виртуальными клавиатурами мобильных устройств на сайте Embarcadero

уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.