firemonkey - 如何以小写字母启动移动键盘?
firemonkey - How to start mobile Keyboard in lower case letter?
在我的应用程序中,有一个文本字段,用户可以在其中输入他们的帐户电子邮件。
使用 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 如何实现同样的效果?
虽然键盘会显示大写键激活,但如果您设置
procedure TForm.Edit1Typing(Sender: TObject);
begin
Edit1.Text:=AnsiLowerCase(Edit1.Text);
Edit1.GoToTextEnd;
end;
然后所有键入的键都将变为小写。
我想目前没有简单的方法可以像您这样进行准确的设置。 Delphi 和 java vk 类型映射在 fmx.dex.jar 库中实现,默认嵌入每个 FMX Android 项目。
但出于当前目的,您只需将 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;
}
您使用什么组件表示此文本字段?
如果您使用的是 TEdit,那么您可以将 KeyboardType 属性 更改为 EmailAddress,这应该以小写字母启动虚拟键盘。
并且基于启动您的应用程序的 OS,您甚至可以获得自定义键盘布局,它为 @ 等特定字符提供额外的键。也就是说,如果目标 OS 确实支持它。
在我的应用程序中,有一个文本字段,用户可以在其中输入他们的帐户电子邮件。
使用 Java
我可以使用
EditText text = new EditText(context);
text.setInputType(android.text.InputType.TYPE_CLASS_TEXT | android.text.InputType.TYPE_TEXT_FLAG_MULTI_LINE);
Delphi 10 Seattle 如何实现同样的效果?
虽然键盘会显示大写键激活,但如果您设置
procedure TForm.Edit1Typing(Sender: TObject);
begin
Edit1.Text:=AnsiLowerCase(Edit1.Text);
Edit1.GoToTextEnd;
end;
然后所有键入的键都将变为小写。
我想目前没有简单的方法可以像您这样进行准确的设置。 Delphi 和 java vk 类型映射在 fmx.dex.jar 库中实现,默认嵌入每个 FMX Android 项目。
但出于当前目的,您只需将 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;
}
您使用什么组件表示此文本字段?
如果您使用的是 TEdit,那么您可以将 KeyboardType 属性 更改为 EmailAddress,这应该以小写字母启动虚拟键盘。
并且基于启动您的应用程序的 OS,您甚至可以获得自定义键盘布局,它为 @ 等特定字符提供额外的键。也就是说,如果目标 OS 确实支持它。