Skip to content

Delphi Android close keyboard

Cuando desarrollamos para Android desde Delphi o cualquier otro lenguaje, sabemos que algunos componentes son manejados por el mismo Android, como es el caso del Keyboard.

Pero son muchas las situaciones en que necesitamos manejar el teclado del dispositivo.

Para ello tenemos una clase, IFMXVirtualKeyboardService.

Con IFMXVirtualKeyboardService podremos manejar el Keyboard a nuestro antojo, mostrando (Show), ocultando (Hide) entre otras funciones.

Manejo del Keyboard de Android desde Delphi

En este artículo vamos a realizar un ejemplo de como ocultar el teclado de Android y de como mostrarlo dando el foco a un TEdit.

Creamos una nueva Multi-Device Application, seleccionamos Android como Target y en el formulario colocamos un TEdit y dos TButton, como mostramos en la siguiente imagen:

delphi android close keyboard

Al primer TButton le ponemos como text “Hide Key” y al segundo “Show Key”.

De bajo de implementation, debemos colocar el uso de dos unidades para el manejo del Keyboard:

implementation

uses
  FMX.Platform, FMX.VirtualKeyboard;

{$R *.fmx}

En el evento OnClick del button Hide Key colocamos el siguiente código:

procedure TForm1.HideKeyClick(Sender: TObject);
var
  KeyboardService: IFMXVirtualKeyboardService;
begin
  if TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(KeyboardService)) then
    KeyboardService.HideVirtualKeyboard;
end;

Y en el evento OnClick del button Show Key colocamos el siguiente código:

procedure TForm1.ShowKeyClick(Sender: TObject);
var
  KeyboardService: IFMXVirtualKeyboardService;
begin
  if TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(KeyboardService)) then
    KeyboardService.ShowVirtualKeyboard(Edit1);
end;

El código es muy simple y creo que no necesita tanta explicación, simplemente preguntamos si la Plataforma soporta el Service IFMXVirtualKeyboardService, y si es verdadero, llamamos a las funciones HideVirtualKeyboard y ShowVirtualKeyboard de la clase IFMXVirtualKeyboardService.

En el caso de ShowVirtualKeyboard deberemos enviar un parámetro, que corresponde al objeto que tendrá el focus.

El código completo quedaría de la siguiente manera:

unit Unit1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
  FMX.Controls.Presentation, FMX.Edit;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    HideKey: TButton;
    ShowKey: TButton;
    procedure HideKeyClick(Sender: TObject);
    procedure ShowKeyClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses
  FMX.Platform, FMX.VirtualKeyboard;

{$R *.fmx}

procedure TForm1.HideKeyClick(Sender: TObject);
var
  KeyboardService: IFMXVirtualKeyboardService;
begin
  if TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(KeyboardService)) then
    KeyboardService.HideVirtualKeyboard;
end;

procedure TForm1.ShowKeyClick(Sender: TObject);
var
  KeyboardService: IFMXVirtualKeyboardService;
begin
  if TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService, IInterface(KeyboardService)) then
    KeyboardService.ShowVirtualKeyboard(Edit1);
end;

end.