2012-02-16 83 views
2

我正在寫一個Android應用程序(android 2.3.3/API 10),通過WebView加載網站。看看android.webkit.webview源代碼,特別是onSavePassword(...)(你可以找到它HERE)我想發起我自己的自定義AlertDialog而不是股票一個 並應用我的更改,或者我必須編輯android.webkit.webview源碼並重新編譯android.jar?定製Android Webview類

我應該早點解釋說,我試圖這樣的事沒有成功:

class MyWebView extends WebView { 
    public MyWebView(Context context) { 
     super(context); 

    } 
@Override 
    boolean onSavePassword(String schemePlusHost, String username, String password, final Message resumeMsg) { 
     boolean rVal = false; 
      if (resumeMsg == null) { 
       // null resumeMsg implies saving password silently 

      } else { 
       final Message remember = mPrivateHandler.obtainMessage(REMEMBER_PASSWORD); 
       remember.getData().putString("host", schemePlusHost); 
       remember.getData().putString("username", username); 
       remember.getData().putString("password", password); 
       remember.obj = resumeMsg; 

       final Message neverRemember = mPrivateHandler.obtainMessage(NEVER_REMEMBER_PASSWORD); 
       neverRemember.getData().putString("host", schemePlusHost); 
       neverRemember.getData().putString("username", username); 
       neverRemember.getData().putString("password", password); 
       neverRemember.obj = resumeMsg; 

       new AlertDialog.Builder(getContext()) 
         .setTitle("My Custom Title") 
         .setMessage("My Custom Save/Don't Save Dialog Message") 
         .setPositiveButton(com.android.internal.R.string.save_password_notnow, 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int which) { 
           resumeMsg.sendToTarget(); 
          } 
         }) 
         .setNeutralButton(com.android.internal.R.string.save_password_remember, 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int which) { 
           remember.sendToTarget(); 
          } 
         }) 
         .setNegativeButton(com.android.internal.R.string.save_password_never, 
         new DialogInterface.OnClickListener() { 
          public void onClick(DialogInterface dialog, int which) { 
           neverRemember.sendToTarget(); 
          } 
         }) 
         .setOnCancelListener(new OnCancelListener() { 
          public void onCancel(DialogInterface dialog) { 
           resumeMsg.sendToTarget(); 
          } 
         }).show(); 
       // Return true so that WebViewCore will pause while the dialog is 
       // up. 
       rVal = true; 
      } 
      return rVal; 
    } 

Eclipse的正當要求「的方法onSavePassword類型MainActivity.MyWebView的(字符串,字符串,字符串,消息)必須重寫超類方法「,並告訴我刪除@Override。並且更改後的對話框不需要。

再次感謝

編輯

我想改變,即方法。 android webview.class中的onSavePassword(...)沒有與其關聯的修飾符。我認爲這意味着這種方法只能被駐留在相同包中的類訪問。正如我之前提到的,我嘗試創建自己的webview類來擴展庫存類,但它沒有找到onSavePassword。任何想法,或webView類的其他擴展的例子可能指向正確的方向?

回答

0

剛剛覆蓋。

但是,你應該採取試測試誤差週期的策略,這是一個goog方式IT學習...

+0

感謝您的提示,我只是嘗試執行@Override是這樣的:私人類MyWebViewClient擴展WebViewClient {} – 2012-02-16 19:40:34

+0

重寫是不是繼承類。Overiding意味着在子類中重新定義一個從sueprclass繼承的方法。 – Snicolas 2012-02-16 20:46:26

0

爲什麼不乾脆讓自己WebViewExt類,它擴展WebView和覆蓋功能?然後使用您自己的WebViewExt並忘記WebView存在。

+0

這聽起來像我想要遵循的解決方案。我發現我想重寫的方法:/ *包* /布爾onSavePassword(字符串schemePlusHost,字符串用戶名, 字符串密碼,最終消息resumeMsg)但當我在MyWebView類中進行更改時,我得到「方法onSavePassword (字符串,字符串,字符串,消息)類型MyWebView必須重寫超類方法「。任何示例代碼從sombody其他誰建立自己的webview類? – 2012-03-22 19:23:45

4

一旦您使用自己的擴展WebView類,您應該重命名com.packagename.YourNewWebViewClass的Layout XML文件中的每個Web瀏覽器。

事實上:

<WebView layout......></WebView> 

將成爲

<com.mypackage.MyWebView layout....></com.mypackage.MyWebView layout> 

這應該做的伎倆!

+0

感謝您的幫助。我仍然遇到了webView擴展類的問題。有人能夠成功擴展webview的一些示例代碼嗎? – 2012-03-23 11:37:46

0

爲什麼你不在你的代碼中創建與WebView相同的包並將你的類放入該包中。在運行時它會被認爲是在同一個包中,你將能夠使用@override註釋

+0

感謝您的帖子。這是我傾向的方向,但我從來沒有得到它的工作。有一個例子嗎? – 2012-08-27 12:50:01