zoukankan      html  css  js  c++  java
  • 在 Android 的文字编辑控件 (TEdit) 中, 如何按下 Enter 就隐藏虚拟键盘

    在 Windows 的应用中,我们常常为了让使用者能够快速输入,在Edit元件中的onKeyUp或者 onKeyDown 事件中主动侦测使用者输入的字元是否有换行符号 (Enter),当使用者按下了Enter,程式码就主动把游标 Focus 带到下个栏位,但在行动装置中,又多了一个课题:『如果是多个栏位,就带到下个栏位。但如果是单一栏位,或是最后一个栏位,就隐藏虚拟键盘』

    这个课题笔者在 2014九月的笔记『Virtual Keyboard 的显示与隐藏』里面已经有介绍过一次,只是当时是聚焦在iOS系统上,因为当时笔者开发的平台大都聚焦在iOS,对Android系统的关切并不多。

    最近在一些项目中,也把触角伸到了Android平台,但笔者仍坚持『不到最后关头,绝不轻言JAVA』的原则,认识笔者的朋友们也都知道,笔者会写,但非不得已,绝不写JAVA的原则。

    加上Delphi从XE6之后,对Android的支援也很深入了,笔者就更能坚定这个立场。

    言归正传,在TEdit元件中要在使用者按下虚拟键盘的Enter键时,隐藏虚拟键盘的话,要怎么做呢?

    显然用2014九月那个作法(把focus转移到别的元件), 对Android平台没用,不然笔者也不用多写这篇笔记了。

    是的,熟习Android的使用者都知道,按下Android的实体Back键,就能隐藏虚拟键盘。所以这个作法也很简单,就是『在onKeyUp事件中,把Key 改成 137 即可』

    onKeyUp 事件中,有两个 call by Reference 的参数,一个是 Key, 另一个是 KeyChar, 都让我们可以在处理完键盘事件后,重新赋予新的值给系统。在Delphi Seattle, Berlin, Tokyo (前面的版本我已经移除了,无从验证),这三个比较新的版本中,都定义有 vkHardwareBack这个值,其数值就是 137。

    只需在 onKeyUp 事件中把 137 指派给 Key 这个变数即可隐藏键盘了,但通常我们程式码可能会用于多种平台上,所以我的范例程式代码会加上 {$IFDEF Android} 这样的判别式,以利多平台的程式维护:

    procedure TFormMain.Edit_changeDeviceNameKeyUp(Sender: TObject; var Key: Word;
        var KeyChar: Char; Shift: TShiftState);
    begin
       if Key = vkReturn then begin
          self.btn1.SetFocus;
    
    {$IFDEF ANDROID}
          Key := vkHardwareBack
    {$ENDIF}
       end;
    end; 
    

    这样应该很容易理解,对吗?

  • 相关阅读:
    2010.10.10 第九课 函数(二)(递归)(汉诺塔)
    2020.10.8第八课函数(一)(4种函数)
    2020.9.29 第七课 字符串函数与字符数组
    2020.9.26第六节课数组
    2020.9.22 第四课 运算符表达式和语句
    2020.9.19 第三课 字符串格式化输出与输入
    2020.9.17 第二课 C语言中数据类型 2,8,10进制转换 计算机内存数值存储方式(补码转换)
    2020.9.15 第一课,概念
    spring架构解析--入门(一)
    JAVA对象实例化方式总结
  • 原文地址:https://www.cnblogs.com/dennieschang/p/6889666.html
Copyright © 2011-2022 走看看