2012-10-24 9 views
7

In WebView quando eseguo un JavaScript tramite webview.loadUrl(), il softkey scompare se è visibile. Quando provo a digitare del testo nel campo di testo html, il softkey scompare (se JavaScript è eseguito) e non riesco a digitare tutto il testo.Nella webview di Android quando eseguo javascript la tastiera sotf scompare

Il campo di testo non perde la messa a fuoco, quindi il prompt si trova ancora nel campo di testo, ma il pannello di controllo scende.

Qualcuno può dirmi come risolvere il problema?

+0

Maby una soluzione disordinato, si potrebbe provare a "forzare" la tastiera sia visibile (google) o controllare lo stato della tastiera, e se lo stato è "non visibile" è possibile impostare la tastiera su visibile. Non so se funziona, solo un'idea. – Mdlc

risposta

1

Questo è un comportamento previsto: chiamando WebView.loadUrl() si sta fondamentalmente ricaricando la pagina, quindi la tastiera virtuale viene ignorata.

In alternativa, è possibile provare a determinare se viene visualizzata la tastiera software e ritardare l'esecuzione di JS fino a quando non viene nascosta. Per un metodo generale per verificare lo stato della tastiera virtuale, vedere How to check visibility of software keyboard in Android?

5

Il modo più semplice per farlo è memorizzare le chiamate javascript in un plug-in o in JavascriptInterface e ripetere il metodo nel proprio lato javascript eseguendolo. In questo modo loadUrl non viene mai chiamato.

Qualcosa di simile:

StringBuilder sb = null; 
private final Object LOCK = new Object(); 
public void sendJavascript(String js){ 
    synchronized(LOCK) { 
    if (sb == null){ 
    sb = new StringBuilder(); 
    sb.append("javascript:"); 
    } 
    sb.append(js):  
    } 
} 

Quindi, utilizzando un javascriptInterface:

private class JsInterface { 


@JavascriptInterface 
    public String getJavascript(){ 
     synchronized(LOCK) { 
     String javascriptToRun = sb.toString(); 
     sb = new StringBuilder(); 
     sb.append("javascript:"); 
     return javascriptToRun; 
     } 
     } 
} 

Aggiungere l'interfaccia javascript per il tuo WebView:

JsInterface jsInterface = new JavascriptInterface(); 
webview.addJavascriptInterface(jsInterface, "JsInterface"); 

E sul codice javascript impostare un intervallo di tempo per recuperare la funzione memorizzata.

EDIT

Ho appena trovato this answer, si vede la mia ha un grosso problema, i metodi non sono sincronizzati. Significa che quando chiami getJavascript() la nostra variabile sb potrebbe non essere ancora pronta per essere letta. Ho aggiunto il bit pertinente alla sorgente sopra.

Azionare la sicura o il vostro codice sarà inaffidabile

Problemi correlati