2011-10-12 12 views
342

Ho creato un Activity che ha un titolo e una visualizzazione Web in un LinearLayout. Nel metodo onResume() chiama webView.loadUrl(url). Il problema è che l'attività mostra per prima cosa il titolo con il resto dello schermo vuoto, quindi il browser del dispositivo viene avviato con la pagina per l'URL. Quello che voglio vedere è la pagina visualizzata nello WebView sotto il titolo. Quale potrebbe essere il problema?Webview Android avvia il browser quando si chiama loadurl

Edit: Ok, ha fatto un po 'di ulteriore ricerca e abbiamo trovato questo:

Clicking URLs opens default browser

Esso rimanda al WebView esercitazione here.

Basta implementare il client Web e impostarlo.

+0

Dico questo perché hai risolto il mio problema. .. Grazie. –

+2

@Ray, considera di scrivere una risposta a questa domanda, se hai trovato una soluzione e accettala. Ciò aiuterà le altre persone con lo stesso problema. – HitOdessit

+1

Ho avuto un problema ancora più cattivo. Risulta che anche un * reindirizzamento * verrà caricato con il browser se non viene utilizzato un WebViewClient personalizzato. –

risposta

607

Rispondere alla mia domanda sulla base dei suggerimenti di Maudicus e Hit.

Controllare il tutorial WebView here. Basta implementare il client Web e impostarlo prima di loadUrl. Il modo più semplice è:

myWebView.setWebViewClient(new WebViewClient()); 

Per un'elaborazione più avanzata per il contenuto Web, prendere in considerazione ChromeClient.

+2

Per evitare WebView per avviare il browser predefinito quando si apre la pagina iniziale. –

+8

Grazie per questo incredibile piccolo pezzo di stregoneria! +1 ... MENO UNO PER TE, Android ... – Josh

+0

Ottima risposta. Risolto anche il mio problema. – Omid1989

84

Utilizzare questa:

lWebView.setWebViewClient(new WebViewClient()); 
44

uso in questo modo:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_dedline); 

    WebView myWebView = (WebView) findViewById(R.id.webView1); 
    myWebView.setWebViewClient(new WebViewClient()); 
    myWebView.loadUrl("https://google.com"); 
} 
3

provare questo codice ...

private void startWebView(String url) { 

    //Create new webview Client to show progress dialog 
    //When opening a url or click on link 

    webView.setWebViewClient(new WebViewClient() {  
     ProgressDialog progressDialog; 

     //If you will not use this method url links are opeen in new brower not in webview 
     public boolean shouldOverrideUrlLoading(WebView view, String url) {    
      view.loadUrl(url); 
      return true; 
     } 

     //Show loader on url load 
     public void onLoadResource (final WebView view, String url) { 
      if (progressDialog == null) { 
       // in standard case YourActivity.this 
       progressDialog = new ProgressDialog(view.getContext()); 
       progressDialog.setMessage("Loading..."); 
       progressDialog.show(); 
      } 
     } 
     public void onPageFinished(WebView view, String url) { 
      try{ 
      if (progressDialog.isShowing()) { 
       progressDialog.dismiss(); 
       progressDialog = null; 
      } 
      }catch(Exception exception){ 
       exception.printStackTrace(); 
      } 
     } 

    }); 

    // Javascript inabled on webview 
    webView.getSettings().setJavaScriptEnabled(true); 

    // Other webview options 
    /* 
    webView.getSettings().setLoadWithOverviewMode(true); 
    webView.getSettings().setUseWideViewPort(true); 
    webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); 
    webView.setScrollbarFadingEnabled(false); 
    webView.getSettings().setBuiltInZoomControls(true); 
    */ 

    /* 
    String summary = "<html><body>You scored <b>192</b> points.</body></html>"; 
    webview.loadData(summary, "text/html", null); 
    */ 

    //Load url in webview 
    webView.loadUrl(url); 
} 
13

stavo affrontando lo stesso problema e ho trovato la soluzione Android's official Documentation about WebView

Ecco il mio metodo onCreateView() e qui ho usato due metodi per aprire gli URL

Metodo 1 sta aprendo URL nel browser e

Metodo 2 sta aprendo URL nel WebView desiderato.
e sto usando il metodo 2 per la mia domanda, e questo è il mio codice:

public class MainActivity extends Activity { 
    private WebView myWebView; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     View rootView = inflater.inflate(R.layout.fragment_webpage_detail, container, false); 

     // Show the dummy content as text in a TextView. 
     if (mItem != null) { 

     /* Method : 1 
      This following line is working fine BUT when we click the menu item then it opens the URL in BROWSER not in WebView */ 
     //((WebView) rootView.findViewById(R.id.detail_area)).loadUrl(mItem.url); 

     // Method : 2 
     myWebView = (WebView) rootView.findViewById(R.id.detail_area); // get your WebView form your xml file 
     myWebView.setWebViewClient(new WebViewClient()); // set the WebViewClient 
     myWebView.loadUrl(mItem.url); // Load your desired url 
    } 

    return rootView; 
}                        } 
17

Fai la tua attività in questo modo.

public class MainActivity extends Activity { 
WebView browser; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    // find the WebView by name in the main.xml of step 2 
    browser=(WebView)findViewById(R.id.wvwMain); 

    // Enable javascript 
    browser.getSettings().setJavaScriptEnabled(true); 

    // Set WebView client 
    browser.setWebChromeClient(new WebChromeClient()); 

    browser.setWebViewClient(new WebViewClient() { 

     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       view.loadUrl(url); 
       return true; 
       } 
     }); 
    // Load the webpage 
    browser.loadUrl("http://google.com/"); 
    } 
} 
5

Basta rispondere è possibile utilizzare come questo

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     WebView webView = new WebView(this); 
     setContentView(webView); 
     webView.setWebViewClient(new WebViewClient()); 
     webView.loadUrl("http://www.google.com"); 
    } 
} 
2

Questo lavoro perfetto in un Samsung 7 Grazie a Abdukhafiz per la pubblicazione qui

public class MainActivity extends Activity { 
    WebView browser; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     // find the WebView by name in the main.xml of step 2 
     browser=(WebView)findViewById(R.id.WebView); 

     // Enable javascript 
     browser.getSettings().setJavaScriptEnabled(true); 

     // Set WebView client 
     browser.setWebChromeClient(new WebChromeClient()); 

     browser.setWebViewClient(new WebViewClient() { 

      @Override 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       view.loadUrl(url); 
       return true; 
      } 
     }); 
     // Load the webpage 
     browser.loadUrl("http://www.google.com"); 
    } 
} 
+0

Abdukhafiz ha già postato la risposta, non è necessario ripetere. Puoi revocare la sua risposta come "grazie" – Vega

+0

Per favore non aggiungere "grazie" come risposta. Una volta che hai [reputazione] sufficiente (https://stackoverflow.com/help/whats-reputation), sarai in grado di [votare domande e risposte] (https://stackoverflow.com/help/privileges/vote- in alto) che hai trovato utile. - [Dalla recensione] (/ recensione/post di bassa qualità/17762119) – ntzm

Problemi correlati