2013-05-22 10 views

risposta

6

Quello è come il suo stato implementato purtroppo in Android < 4.1

Quando webkit rende i campi di input, li converte in android.webkit.WebTextView oggetti che determinano come il SoftKeyboard sarà simile e sotto 4,1 io non credo che ci sia un modo per si può cambiare questo o sovrascrivere le ImeOptions impostate dalla classe WebTextView

Ecco perché se si dispone di un campo numerico puro, si vedrà un pulsante successivo, ma per gli altri campi verrà visualizzato il pulsante "Vai". numerica così puro mi sarei aspettato di vederlo, sorpreso voi non

<input type="text" name="..." .... /> ----> on the keyboard you see "Go" 
<input type="number" name="..." .... /> ----> on the keyboard you see "Next" 

Questo è dal file webviewclass.java da webkit

case WebTextView.NORMAL_TEXT_FIELD: 
        break; 
       case WebTextView.TEXT_AREA: 
        inputType |= InputType.TYPE_TEXT_FLAG_MULTI_LINE 
          | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES 
          | InputType.TYPE_TEXT_FLAG_AUTO_CORRECT; 
        action = EditorInfo.IME_ACTION_NONE; 
        break; 
       case WebTextView.PASSWORD: 
        inputType |= EditorInfo.TYPE_TEXT_VARIATION_WEB_PASSWORD; 
        break; 
       case WebTextView.SEARCH: 
        action = EditorInfo.IME_ACTION_SEARCH; 
        break; 
       case WebTextView.EMAIL: 
        // inputType needs to be overwritten because of the different text variation. 
        inputType = InputType.TYPE_CLASS_TEXT 
          | InputType.TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS; 
        break; 
       case WebTextView.NUMBER: 
        // inputType needs to be overwritten because of the different class. 
        inputType = InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_NORMAL 
          | InputType.TYPE_NUMBER_FLAG_SIGNED | InputType.TYPE_NUMBER_FLAG_DECIMAL; 
        // Number and telephone do not have both a Tab key and an 
        // action, so set the action to NEXT 
        break; 

Così la sua evidente che numero di telefono e campi hanno successiva. Ora io dico < 4.1 perché 4.1 potresti probabilmente usare ed estendere WebViewInputConnection da WebViewClassic.java nel webkit e hackerarlo per lavorare per i campi di testo, ma sì nessuna modifica documentata da Android, si attengono a questo design, e non ho nemmeno provato questo , la speranza quindi basta speculativa: D

+0

e 4.1 e sopra? – Blundell

+0

@Blundell direi <4.1 perché 4.1 potresti probabilmente usare ed estendere 'WebViewInputConnection' da WebViewClassic.java nel webkit e hackerarlo per lavorare per i campi di testo, ma sì no modifiche documentate da Android, si attaccano a questo design, e Non ho nemmeno provato questo, quindi solo speranze speculative: DI modificherà la risposta per includere questo – Slartibartfast

+0

Quindi, in generale in una WebView non c'è modo nel html di controllare ciò che ImeOptions ha la tastiera. Questo include 'nextFocusDown' ecc? * (esclusi gli hack) *. – Blundell

7

Ecco quello che mi ha aiutato, utilizzando un WebView costume e sovrascrivendo EditInfo da onCreateInputConnection() (Nexus 4 e Nexus 5 con Android 4.4 *.):

private static class CustomWebView extends WebView { 

    public CustomWebView(Context context) { 
     super(context); 
    } 

    @Override 
    public InputConnection onCreateInputConnection(EditorInfo outAttrs) { 
     InputConnection inputConnection = super.onCreateInputConnection(outAttrs); 
     if (outAttrs != null) { 
      // remove other IME_ACTION_* 
      outAttrs.imeOptions &= ~EditorInfo.IME_ACTION_GO; 
      outAttrs.imeOptions &= ~EditorInfo.IME_ACTION_SEARCH; 
      outAttrs.imeOptions &= ~EditorInfo.IME_ACTION_SEND; 
      outAttrs.imeOptions &= ~EditorInfo.IME_ACTION_DONE; 
      outAttrs.imeOptions &= ~EditorInfo.IME_ACTION_NONE; 
      // add IME_ACTION_NEXT instead 
      outAttrs.imeOptions |= EditorInfo.IME_ACTION_NEXT; 
     } 
     return inputConnection; 
    } 
} 
-1

Puoi controllare questo link. Ho scritto il codice javascript per gestire il display accanto al pulsante accanto a ogni input.

Problemi correlati