firemonkey - 如何以小写字母开始移动键盘?

时间:2015-10-06 11:38:24

标签: 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实现相同目标?

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

您使用哪个组件来表示此文本字段?

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

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

答案 2 :(得分:-3)

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

procedure TForm.Edit1Typing(Sender: TObject);
begin

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

end;

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