【问题标题】:firemonkey - How to start mobile Keyboard in lower case letter?firemonkey - 如何以小写字母启动移动键盘?
【发布时间】:2016-01-03 07:29:20
【问题描述】:

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

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

【问题讨论】:

  • Machado,你用 firemonkey 来编程 Android?...我需要帮助

标签: delphi firemonkey delphi-10-seattle


【解决方案1】:

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

procedure TForm.Edit1Typing(Sender: TObject);
begin

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

end;

那么所有键入的键都是小写的。

【讨论】:

  • 这回答了一个不同的问题,也阻止了用户插入。
  • 不同的问题,相同的预期行为:避免用户在电子邮件地址上输入大写字母。这绝对不是最好的 UX 方法。好吧,我只是想帮忙。
  • 这实际上是非常糟糕的行为,因为用户认为他们会得到一个大写字符而没有。也许他们希望在他们输入的地址中使用大写。
【解决方案2】:

我想目前没有简单的方法可以进行像您这样的准确设置。 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;
}

【讨论】:

    【解决方案3】:

    你用什么组件来表示这个文本字段?

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

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

    【讨论】:

      猜你喜欢
      • 2011-09-19
      • 2019-02-15
      • 2012-09-30
      • 1970-01-01
      • 1970-01-01
      • 2016-10-05
      • 2021-04-29
      • 1970-01-01
      • 2017-11-14
      相关资源
      最近更新 更多