2013-05-22 10 views

Odpowiedz

6

Ów jak jego zostały wdrożone niestety w Androidzie < 4,1

Kiedy WebKit renderuje pól wejściowych, konwertuje je do android.webkit.WebTextView obiektów, które określają, w jaki sposób softkeyboard będzie wyglądać i poniżej 4.1 nie sądzę, istnieje sposób, aby zmień to lub zastąp ImeOptions ustawione przez WebTextView class

To dlatego, jeśli masz czyste pole numeryczne, zobaczysz następny przycisk, ale dla innych pól zobaczysz przycisk "Go". Tak czysta numeryczny Spodziewam się go zobaczyć, zaskoczył dont

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

to jest z pliku webviewclass.java z 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; 

więc jasne, że jego numer telefonu i mieć obok pola. Teraz mówię: < 4.1 ponieważ 4.1 mógłbyś prawdopodobnie użyć i rozszerzyć WebViewInputConnection z WebViewClassic.java w webkicie i zhakować to do pracy dla pól tekstowych, ale tak nie udokumentowana zmiana z Androida, oni trzymają się tego projektu, a ja nawet tego nie wypróbowałem , więc tylko spekulacyjny nadzieja: D

+0

i 4.1 i wyżej? – Blundell

+0

@Blundell cóż, mówię <4.1, ponieważ 4.1 prawdopodobnie mógłbyś użyć i rozszerzyć 'WebViewInputConnection' z WebViewClassic.java w webkicie i zhakować to by działało dla pól tekstowych, ale tak, nie ma udokumentowanej zmiany z Androida, oni trzymają się tego projektu, i Nawet tego nie próbowałem, więc tylko spekulatywna nadzieja: DI zredaguje odpowiedź na to – Slartibartfast

+0

Ogólnie w WebView nie ma mowy w html, aby kontrolować to, co ImeOptions ma klawiatura. Czy to obejmuje 'nextFocusDown' itp? * (bez hacków) *. – Blundell

7

Oto co mi pomogło, przy użyciu niestandardowego WebView i przesłanianie EditInfo z onCreateInputConnection() (Nexus 4 i Nexus 5 z Androidem 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

można sprawdź to link. Napisałem kod javascript, aby obsłużyć wyświetlanie następnego przycisku obok każdego wejścia.

Powiązane problemy