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:
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.