2010-12-05 6 views
8

J'ai dans mon application 2 vues:Intégrer un webview dans une autre vue

a. res/layout/main.xml - une vue standard avec 1 bouton

b. res/layout/web_view.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
     <WebView android:id="@+id/webview" 
      android:layout_height="fill_parent" 
      android:layout_width="fill_parent" /> 
</LinearLayout> 

Lorsque je clique sur le bouton situé sur la première vue (a), il charge le WebView (b) et charge une url:

// click on the "Browser" button in view a 
public void goToWebView(View view) { 
     setContentView(R.layout.web_view); 
     WebView mWebView = (WebView) findViewById(R.id.webview); 
     mWebView.getSettings().setJavaScriptEnabled(true); 
     mWebView.loadUrl("http://www.google.com"); 
    } 

Tout ce qui travaille bien, le chargement de l'url bien mais le navigateur est instancié dans sa propre vue (un troisième, pas b lui-même) et mon but est d'utiliser le Webview pour montrer du code HTML dans mon application, pas en dehors de celui-ci, dans un navigateur séparé.

Anyboyd une idée?

Ceci est fait en utilisant l'API level8/Android 2.2.

Merci pour votre aide. Paul

+0

Cette chose est arrivé à moi que quand j'ouvrais des urls, pour lesquels ont été enregistrés intention des auditeurs. Par exemple google chrome semble s'inscrire pour ouvrir 'http: // www.google.com'. Lorsque j'essayais un autre domaine 'http: // www.something.com', il était ouvert dans la même vue. Juste pour info –

Répondre

15

En fait, j'ai finalement compris. Même si vous chargez l'URL avec programatically

mWebView.loadUrl("http://www.google.com"); 

vous avez également mofify le comportement par défaut (ce qui est l'ouverture d'une URL dans une nouvelle instance du navigateur).
Le code précédent nécessite 2 améliorations.

// override default behaviour of the browser 
private class MyWebViewClient extends WebViewClient { 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      view.loadUrl(url); 
      return true; 
     } 
    } 

Ensuite, définissez le point de vue qui utilise Webclient le nouveau comportement:

public void goToWebView(View view) { 
     setContentView(R.layout.web_view); 
     WebView mWebView = (WebView) findViewById(R.id.webview); 
     // add the following line ---------- 
     mWebView.setWebViewClient(new MyWebViewClient()); 
     mWebView.getSettings().setJavaScriptEnabled(true); 
     mWebView.loadUrl("http://www.google.com"); 
    } 
+0

oui c'est la chose. votre question était en train de conférer. Notre question shudve été concernant la gestion de la redirection dans le webview – Varun

+0

+1 son utilisation complète –

+0

Merci @Paul. J'ai finalement trouvé ce que je cherchais pendant deux heures. – bogdanmogo

Questions connexes