2017-01-31 8 views
1

WebViewで電子メール、パスワード、および検証コードの3つの入力を使用して、変更するアクセス権のないHTMLを読み込むアプリを抜粋しました。最後の数字は常に数字です。私はこの最後の入力要素に対してのみ数値キーボードを表示したいと思います。WebViewからのonCreateInputConnection内の入力を区別する方法は?

@Override 
    public InputConnection onCreateInputConnection(EditorInfo outAttrs) { 
     BaseInputConnection ic = new BaseInputConnection(this, true); 
     outAttrs.inputType = InputType.TYPE_CLASS_NUMBER; // Tells the keyboard to show the number pad 
     return ic; 
    } 

問題がある、私はHTMLに私が持っている三つの異なる入力が異なるためにチェックすることができたフラグか分からない:私は、以下に示すようにWebViewのクラスを拡張し、このメソッドをオーバーライドしていることをやっていますので、このコードは検証コードの入力要素に対してのみ実行できます。何か案は?

+0

このメソッドのonCreateInputConnection内でWebViewからの入力フィールドを区別することに関連するものは見つかりましたか? – malhobayyeb

+1

残念ながら –

答えて

0

javascriptでbefore focusイベントをキャプチャし、フォーカスを取得しようとしているフィールドIDを格納し、その値をonCreateInputConnectionで使用して、表示するキーボードのタイプを決定します。

ソースhtmlを変更するアクセス権がない場合は、独自のJavaScriptを注入してfocusinハンドラを設定することができます。

たとえば、

public class MyWebView extends WebView 
{ 
    protected String m_szFocusInputID = ""; 

    public void onStartLoad() 
    { 
     WebSettings oWebSettings = getSettings(); 
     oWebSettings.setJavaScriptEnabled(true); 
     ... 
     m_oClient = new WebViewClientEx(); 
     setWebViewClient(m_oClient); 
     ... 
     addJavascriptInterface(new JSBridge(), "MyApp"); 
     loadUrl("file:///android_asset/myfile.html"); 
    } 

    @Override 
    public InputConnection onCreateInputConnection(EditorInfo oAttrs) 
    { 
     InputConnection oConn = super.onCreateInputConnection(oAttrs); 

     if ("someid".compareTo(m_szFocusInputID) == 0) 
     { 
      oAttrs.inputType = InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL; 
     } 
     return oConn; 
    } 


    private class WebViewClientEx extends WebViewClient 
    { 
     @Override 
     public void onPageFinished(WebView oView, String szUrl) 
     { 
      evaluateJavascript("$('#myinput1').focusin(function() { MyApp.onFocusIn(this.id); });", null);  
     } 
    } 


    public class JSBridge extends Object 
    { 
    ... 
     @android.webkit.JavascriptInterface 
     public void onFocusIn(String szFocusInputID) 
     { 
      m_szFocusInputID = szFocusInputID; 
     } 
    } 
} 
関連する問題