2015-10-06 63 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,它應以小寫字母開頭虛擬鍵盤。

並且基於您的應用程序啓動的操作系統,您甚至可以獲得自定義鍵盤佈局,該佈局可爲特定字符(如@)提供其他鍵。這是如果目標操作系統確實支持。