delphi - firemonkey - 如何以小写字母启动移动键盘?

标签 delphi firemonkey delphi-10-seattle

在我的应用程序中,有一个文本字段,用户可以在其中输入他们的帐户电子邮件。

使用Java,我可以轻松地让 Android 键盘以小写字母开头

EditText text = new EditText(context);
text.setInputType(android.text.InputType.TYPE_CLASS_TEXT | android.text.InputType.TYPE_TEXT_FLAG_MULTI_LINE);

如何使用 Delphi 10 Seattle 实现同样的目标?

最佳答案

我想目前没有简单的方法可以像您这样进行准确的设置。 Delphi 和 java vk 类型映射在 fmx.dex.jar 库中实现,默认情况下嵌入到每个 FMX And​​roid 项目中。

但就当前目的而言,您只需将 KeyboardType 设置为 EmailAddress,它将转换为 TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_EMAIL_ADDRESS 组合。这对于 Android 来说将是最好的决定。

这是所有映射。

在 Android 上,TVirtualKeyboardType 值和 TJFMXTextEditorProxy.JavaClass 常量之间存在以下映射(请参阅 FMX.Platform.Android):

  case VirtKBControl.KeyboardType of
    TVirtualKeyboardType.Default:
      KbType := TJFMXTextEditorProxy.JavaClass.INPUT_TEXT;
    TVirtualKeyboardType.NumbersAndPunctuation:
      KbType := TJFMXTextEditorProxy.JavaClass.INPUT_NUMBER_AND_PUNCTUATION;
    TVirtualKeyboardType.NumberPad:
      KbType := TJFMXTextEditorProxy.JavaClass.INPUT_NUMBER;
    TVirtualKeyboardType.PhonePad:
      KbType := TJFMXTextEditorProxy.JavaClass.INPUT_PHONE;
    TVirtualKeyboardType.Alphabet:
      KbType := TJFMXTextEditorProxy.JavaClass.INPUT_ALPHABET;
    TVirtualKeyboardType.URL:
      KbType := TJFMXTextEditorProxy.JavaClass.INPUT_URL;
    TVirtualKeyboardType.NamePhonePad:
      KbType := TJFMXTextEditorProxy.JavaClass.INPUT_NAME_PHONE_PAD;
    TVirtualKeyboardType.EmailAddress:
      KbType := TJFMXTextEditorProxy.JavaClass.INPUT_EMAIL_ADDRESS;
  end;

TJFMXTextEditorProxy.JavaClass 常量和 android.text.InputType 之间的映射如下(位于 fmx.dex.jar 中):

switch (mInputType) {
case INPUT_NUMBER:
    outAttrs.inputType = InputType.TYPE_CLASS_NUMBER;
    break;
case INPUT_NUMBER_AND_PUNCTUATION:
    outAttrs.inputType = InputType.TYPE_CLASS_TEXT;
    break;
case INPUT_PHONE:
    outAttrs.inputType = InputType.TYPE_CLASS_PHONE;
    break;
case INPUT_ALPHABET:
    outAttrs.inputType = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS;
    if (!mPassword)
        outAttrs.inputType |= InputType.TYPE_TEXT_FLAG_CAP_SENTENCES;
    break;
case INPUT_URL:
    outAttrs.inputType = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_URI;
    break;
case INPUT_NAME_PHONE_PAD:
    outAttrs.inputType = InputType.TYPE_CLASS_PHONE;
    if (!mPassword)
        outAttrs.inputType |= InputType.TYPE_TEXT_FLAG_CAP_SENTENCES;
    break;
case INPUT_EMAIL_ADDRESS:
    outAttrs.inputType = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS;
    break;
case INPUT_TEXT:
default:
    outAttrs.inputType = InputType.TYPE_CLASS_TEXT;
    if (!mPassword)
        outAttrs.inputType |= InputType.TYPE_TEXT_FLAG_CAP_SENTENCES;
    break;          
}

if (mPassword)
{
    if ((outAttrs.inputType & InputType.TYPE_CLASS_NUMBER) == InputType.TYPE_CLASS_NUMBER)
        outAttrs.inputType |= InputType.TYPE_NUMBER_VARIATION_PASSWORD;
    else
        outAttrs.inputType |= InputType.TYPE_TEXT_VARIATION_PASSWORD;
}

关于delphi - firemonkey - 如何以小写字母启动移动键盘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32968971/

相关文章:

Delphi - TCameraComponent 找不到闪光灯

delphi - 更改放大镜玻璃的高度和宽度

json - 如何在 Delphi 中用值(而不是对)填充 JSON 数组?

delphi - 为什么FASTMM的完全 Debug模式要求fulldebugmode.dll与应用程序的.exe文件位于同一文件夹中?

delphi - Spring4D中是否可以多次注册同一个类/接口(interface)?

delphi - 如何将 TGrid 的 'selected' 属性设置为 -1

delphi - 如何更改 Delphi Firemonkey XE7 中组合框下拉菜单的字体大小?

delphi - Chau Chee Yang 的 dbExpress 和 XE2 Enterprise dbExpress for Firebird 的兼容性如何?

delphi - 自定义组件控件不断重新创建

delphi - Firemonkey自定义组件