2015-10-06 67 views
3

在我的应用程序中,有一个文本字段,用户将在其中键入其帐户电子邮件。firemonkey - 如何启动小写字母的移动键盘?

随着Java我可以很容易地使Android键盘开始与小写字母使用

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

怎么可能实现与德尔福10西雅图一样吗?

+0

Machado,你用firemonkey进行Android编程?...我需要帮助 –

回答

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)之间的以下映射:TJFMXTextEditorProxy.JavaClass常数和android.text.InputType之间

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; 

映射是以下(它在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

虽然键盘将显示激活了大写键,如果你设置

procedure TForm.Edit1Typing(Sender: TObject); 
begin 

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

end; 

然后,所有类型的密钥将小写。

+0

这回答了一个不同的问题,并且也阻止了用户的插入。 –

+0

不同的问题,相同的预期行为:避免用户在电子邮件地址上键入大写字母。这绝对不是最好的UX方法。那么,我只是想帮忙。 – Machado

+1

这实际上是很差的行为,因为用户认为他们会得到一个大写字母,而不是。也许他们想在他们输入的地址中输入大写字母。 –

0

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

如果您使用的是TEdit,那么您可以将KeyboardType属性更改为EmailAddress,它应以小写字母开头虚拟键盘。

并且基于您的应用程序启动的操作系统,您甚至可以获得自定义键盘布局,该布局可为特定字符(如@)提供其他键。这是如果目标操作系统确实支持。