新建一个工程,
把uUIFunction.pas这个单元添加到工程中去,并且在主窗体中引用此单元,
在主窗体中引用OrangeUI的uComponentType这个单元,
在主窗体上放置一个模拟虚拟键盘显示的Panel控件,
在虚拟键盘弹出的时候,会把这个Panel的高度设置为虚拟键盘的高度,
再设置主窗体的虚拟键盘事件:
在虚拟键盘显示事件OnVirtualKeyboardShown中,
加上用于通知Frame虚拟键盘事件显示的过程,
CallSubFrameVirtualKeyboardShown(Sender,Self,KeyboardVisible,Bounds);
虚拟键盘隐藏事件OnVirtualKeyboardHidden事件加上
加上用于通知Frame虚拟键盘事件隐藏的过程,
CallSubFrameVirtualKeyboardHidden(Sender,Self,KeyboardVisible,Bounds);
并且在主窗体的OnShow事件中加入
启用模拟虚拟键盘、指定虚拟键盘模拟控件的代码,
修复Android下的虚拟键盘的代码,
以及处理虚拟键盘隐藏和显示的代码
如下图所示:
//在Windows平台下的模拟虚拟键盘控件
IsSimulateVirtualKeyboardOnWindows:=True;
//模拟虚拟键盘控件的高度
SimulateWindowsVirtualKeyboardHeight:=160;
GlobalAutoProcessVirtualKeyboardControlClass:=TSkinFMXPanel;
GlobalAutoProcessVirtualKeyboardControl:=pnlVirtualKeyBoard;
GlobalAutoProcessVirtualKeyboardControl.Visible:=False;
{$IFNDEF MSWINDOWS}
//在模拟器下设置为透明
pnlVirtualKeyBoard.SelfOwnMaterialToDefault.IsTransparent:=True;
pnlVirtualKeyBoard.Caption:=”;
{$ENDIF}
//修复Android下的虚拟键盘隐藏和显示
GetGlobalVirtualKeyboardFixer.StartSync(Self);
再新建一个Frame,Name为FrameLogin,单元名为LoginFrame.pas,
我们用它来做为登陆界面,
放好ScrollBox,取名为sbClient,Align设置为Client,
ScrollBox上面放好ScrollBoxContent,取名为sbcClient,
再在ScrollBoxContent上面放好用户名和密码所需要的控件,
edtPassword和edtUserName的控件类型必须是TSkinFMXEdit,
就要实现在uUIFunction.pas单元中定义的IFrameVirtualKeyboardEvent接口,
IFrameVirtualKeyboardAutoProcessEvent=interface
[‘{D25150F4-EB4C-4097-93FE-51BFD19FF29D}’]
//当前需要处理的控件
function GetCurrentPorcessControl(AFocusedControl:TControl):TControl;
//虚拟键盘放在哪里
function GetVirtualKeyboardControlParent:TControl;
end;
在LoginFrame.pas的uses中引用uUIFunction单元,
在FrameLogin的声明中加入IFrameVirtualKeyboardAutoProcessEvent,
再加入接口的两个方法,并实现它们,
在窗体的FormShow事件中动态创建LoginFrame来显示登陆页面,
var
ALoginFrame:TFrameLogin;
begin
ALoginFrame:=TFrameLogin.Create(Self);
ALoginFrame.Parent:=Self;
ALoginFrame.Align:=TAlignLayout.Client;
可以直接在Windows平台下点击SkinFMXEdit来模拟的虚拟键盘弹出的效果: