加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

修正 XE5 Android 键盘三个问题

发布时间:2020-12-15 04:35:53 所属栏目:大数据 来源:网络整理
导读:说明:XE5 在 Android 平台上存在这一些键盘操作的问题,目前发现有下列几种: 按键盘上的隐藏键后,无法按上一页 。 按键盘上的隐藏键后,无法触发 OnVirtualKeyboardHidden事件。 关闭键盘后,再点一次无法显示键盘 。 } 内为增加的部份 ): { = = = TRec

说明:XE5 在 Android 平台上存在这一些键盘操作的问题,目前发现有下列几种:

  1. 按键盘上的隐藏键后,无法按上一页
  2. 按键盘上的隐藏键后,无法触发 OnVirtualKeyboardHidden事件。
  3. 关闭键盘后,再点一次无法显示键盘

}内为增加的部份):


{
=== TRectF.Create(ConvertPixelToPoint(TPointF.Create(TotalRect.left,TotalRect.top +

<span style="color: #0000ff;">function<span style="color: #000000;"> TVirtualKeyboardAndroid.GetVirtualKeyBoardState: TVirtualKeyBoardState;
<span style="color: #0000ff;">begin
<span style="color: #0000ff;">if FError <span style="color: #0000ff;">then<span style="color: #000000;">
Result :=<span style="color: #000000;"> [vksError]
<span style="color: #0000ff;">else<span style="color: #000000;">
Result :=<span style="color: #000000;"> [];
<span style="color: #0000ff;">if IsAutoShow <span style="color: #0000ff;">then<span style="color: #000000;">
Result := Result +<span style="color: #000000;"> [vksAutoShow];
<span style="color: #0000ff;">if <span style="color: #0000ff;">not FError <span style="color: #0000ff;">then
<span style="color: #0000ff;">begin
<span style="color: #008000;">{<span style="color: #008000;">+++><span style="color: #008000;">}
//<span style="color: #000000;"> 这里只解决: 按键盘上的隐藏后,无法再按上一页的问题 (按上一页后,才会执行这里).
<span style="color: #0000ff;">if FState = vkbsVisible <span style="color: #0000ff;">then
<span style="color: #0000ff;">if ObtainKeyboardRect.Height < <span style="color: #800080;">30 <span style="color: #0000ff;">then<span style="color: #000000;">
SetState(TVirtualKeyboardAndroid.TvkbState.vkbsHidden);
<span style="color: #008000;">{<span style="color: #008000;"><+++<span style="color: #008000;">}
<span style="color: #0000ff;">if FState = vkbsVisible <span style="color: #0000ff;">then<span style="color: #000000;">
Result := Result +<span style="color: #000000;"> [vksVisible];
<span style="color: #0000ff;">end<span style="color: #000000;">;
<span style="color: #0000ff;">end;

Main.pas

//------------------------------------------------------------------------------ // . by 龟山阿卍 QQ - // http://www.cnblogs.com/onechen/ - // - // 需修改 - // FMX.VirtualKeyboard.Android.pas - //------------------------------------------------------------------------------

<span style="color: #0000ff;">unit<span style="color: #000000;"> Main;

<span style="color: #0000ff;">interface

<span style="color: #0000ff;">uses<span style="color: #000000;">
System.SysUtils,System.Types,System.UITypes,System.Classes,System.Variants,FMX.Platform,FMX.VirtualKeyboard.Android,FMX.VirtualKeyboard,FMX.Types,FMX.Controls,FMX.Forms,FMX.Graphics,FMX.Dialogs,FMX.Edit,FMX.StdCtrls,FMX.Layouts,FMX.Memo;

<span style="color: #0000ff;">type<span style="color: #000000;">
TForm1 = <span style="color: #0000ff;">class<span style="color: #000000;">(TForm)
ToolBar1: TToolBar;
Label1: TLabel;
VirtualKeyboardTimer: TTimer;
Memo1: TMemo;
Edit1: TEdit;
<span style="color: #0000ff;">procedure<span style="color: #000000;"> FormVirtualKeyboardHidden(Sender: TObject;
KeyboardVisible: Boolean; <span style="color: #0000ff;">const<span style="color: #000000;"> Bounds: TRect);
<span style="color: #0000ff;">procedure<span style="color: #000000;"> FormVirtualKeyboardShown(Sender: TObject;
KeyboardVisible: Boolean; <span style="color: #0000ff;">const<span style="color: #000000;"> Bounds: TRect);
<span style="color: #0000ff;">procedure<span style="color: #000000;"> VirtualKeyboardTimerTimer(Sender: TObject);
<span style="color: #0000ff;">procedure<span style="color: #000000;"> Edit1Click(Sender: TObject);
<span style="color: #0000ff;">private
<span style="color: #008000;">{<span style="color: #008000;"> private declarations <span style="color: #008000;">}
<span style="color: #0000ff;">public
<span style="color: #008000;">{<span style="color: #008000;"> Public declarations <span style="color: #008000;">}
<span style="color: #0000ff;">end<span style="color: #000000;">;

<span style="color: #0000ff;">var<span style="color: #000000;">
Form1: TForm1;

<span style="color: #0000ff;">implementation

<span style="color: #008000;">{<span style="color: #008000;">$R *.fmx<span style="color: #008000;">}

//<span style="color: #000000;"> 显示键盘
<span style="color: #0000ff;">function ShowVirtualKeyboard(<span style="color: #0000ff;">const<span style="color: #000000;"> AControl: TFmxObject): Boolean;
<span style="color: #0000ff;">var<span style="color: #000000;"> Service1: IFMXVirtualKeyboardService;
<span style="color: #0000ff;">begin
<span style="color: #0000ff;">if (ObtainKeyboardRect.Height < <span style="color: #800080;">30) <span style="color: #0000ff;">and<span style="color: #000000;">
TPlatformServices.Current.SupportsPlatformService(IFMXVirtualKeyboardService,IInterface(Service1)) <span style="color: #0000ff;">then<span style="color: #000000;">
Result :=<span style="color: #000000;"> Service1.ShowVirtualKeyboard(AControl)
<span style="color: #0000ff;">else Result :=<span style="color: #000000;"> False;
<span style="color: #0000ff;">end<span style="color: #000000;">;

<span style="color: #0000ff;">procedure<span style="color: #000000;"> TForm1.FormVirtualKeyboardHidden(Sender: TObject;
KeyboardVisible: Boolean; <span style="color: #0000ff;">const<span style="color: #000000;"> Bounds: TRect);
<span style="color: #0000ff;">begin<span style="color: #000000;">
Edit1.Text := <span style="color: #800000;">'<span style="color: #800000;">Keyboard hidden!<span style="color: #800000;">'<span style="color: #000000;">;
Memo1.Text := Format(<span style="color: #800000;">'<span style="color: #800000;">W: %d H: %d<span style="color: #800000;">'<span style="color: #000000;">,[Bounds.Width,Bounds.Height]);

 VirtualKeyboardTimer.Enabled :</span>= False; //<span style="color: #000000;"&gt; 关闭检查键盘高度

<span style="color: #0000ff;">end<span style="color: #000000;">;

<span style="color: #0000ff;">procedure<span style="color: #000000;"> TForm1.FormVirtualKeyboardShown(Sender: TObject;
KeyboardVisible: Boolean; <span style="color: #0000ff;">const<span style="color: #000000;"> Bounds: TRect);
<span style="color: #0000ff;">begin<span style="color: #000000;">
Edit1.Text := <span style="color: #800000;">'<span style="color: #800000;">Keyboard shown!<span style="color: #800000;">'<span style="color: #000000;">;
Memo1.Text := Format(<span style="color: #800000;">'<span style="color: #800000;">W: %d H: %d<span style="color: #800000;">'<span style="color: #000000;">,Bounds.Height]);

 VirtualKeyboardTimer.Enabled :</span>= True; //<span style="color: #000000;"&gt; 开启检查键盘高度

<span style="color: #0000ff;">end<span style="color: #000000;">;

<span style="color: #0000ff;">procedure<span style="color: #000000;"> TForm1.VirtualKeyboardTimerTimer(Sender: TObject);
<span style="color: #0000ff;">var<span style="color: #000000;"> R: TRect;
<span style="color: #0000ff;">begin
// 检查键盘高度 < <span style="color: #800080;">30<span style="color: #000000;"> 代表键盘关闭.
R :=<span style="color: #000000;"> ObtainKeyboardRect;
<span style="color: #0000ff;">if R.Height < <span style="color: #800080;">30 <span style="color: #0000ff;">then<span style="color: #000000;">
Self.OnVirtualKeyboardHidden(Sender,False,R);
<span style="color: #0000ff;">end<span style="color: #000000;">;

<span style="color: #0000ff;">procedure<span style="color: #000000;"> TForm1.Edit1Click(Sender: TObject);
<span style="color: #0000ff;">begin
//<span style="color: #000000;"> 在 TEdit 或 TMemo 需要用到键盘的控件,加入下行,才能确保关闭键盘后,再点一次可以显示键盘.
ShowVirtualKeyboard(TFmxObject(Sender));
<span style="color: #0000ff;">end<span style="color: #000000;">;

<span style="color: #0000ff;">end.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读