2010-12-05 17 views
8

Tengo en mi aplicación 2 visitas:Incrustar una vista web en otra vista

a. res/layout/main.xml - una vista estándar con 1 botón

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> 

Al hacer clic en el botón en la primera vista (a), se carga la vista web (b) y se carga una 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"); 
    } 

Todo lo que está trabajando bien, la URL se carga bien pero el navegador se crea una instancia en su propia vista (una tercera, no b en sí) y mi objetivo es usar Webview para mostrar código HTML en mi aplicación, no fuera de ella, en un navegador separado

Anyboyd alguna idea?

Esto se hace usando API level8/Android 2.2.

Gracias por su ayuda. Paul

+0

Esto me pasó a mí sólo cuando estaba abriendo algunas direcciones URL, para los que se registraron intención de oyentes. Por ejemplo, google chrome parece registrarse para abrir 'http: // www.google.com'. Cuando probé cualquier otro dominio 'http: // www.something.com' estaría abierto en la misma vista. Solo FYI –

Respuesta

15

En realidad, finalmente lo entendí. Incluso si programáticamente cargar la URL con

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

también hay que mofify el comportamiento por defecto (que se está abriendo un URL en una nueva instancia del navegador).
El código anterior necesita 2 mejoras.

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

A continuación, establezca para la vista que utiliza Webclient el nuevo comportamiento:

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

sí, esa es la cosa. su pregunta fue realmente confesa. Tu pregunta ha sido acerca de cómo manejar la redirección en la vista web – Varun

+0

+1 su uso completo –

+0

Gracias @Paul. Finalmente encontré lo que estoy buscando durante dos horas. – bogdanmogo

Cuestiones relacionadas