4

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

使用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 如何实现同样的目标?

4

3 回答 3

1

我想目前没有简单的方法可以进行像您这样的准确设置。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;
}
于 2015-10-07T06:26:39.943 回答
1

您使用什么组件来表示此文本字段?

如果您使用的是 TEdit,那么您可以将 KeyboardType 属性更改为 EmailAddress,它应该以小写形式启动虚拟键盘。

根据您的应用程序启动的操作系统,您甚至可以获得自定义键盘布局,它为特定字符(如@)提供额外的键。也就是说,如果目标操作系统确实支持它。

于 2015-10-07T21:23:08.540 回答
-3

虽然键盘会在激活大写键的情况下显示,但如果您设置

procedure TForm.Edit1Typing(Sender: TObject);
begin

  Edit1.Text:=AnsiLowerCase(Edit1.Text);
  Edit1.GoToTextEnd;

end;

然后所有键入的键都是小写的。

于 2015-10-06T11:51:53.287 回答