2011-04-06 15 views
20

Estoy implementando una vista web. Quiero dos botones en la parte superior de la página web.Abrir webview no en el nuevo navegador

Tengo un diseño lineal vertical, en cuyo interior hay un diseño horizontal con dos botones y una vista web fuera del diseño horizontal.

Simplemente estoy cargando la URL de Google en el código de Java.

Cada vez que ejecuto la aplicación, se abre un nuevo navegador en la parte superior de la aplicación y los botones se ocultan. No muestra los botones sobre la vista web. Ayuda y cuéntame cómo puedo cargar una URL en la vista web sin abrir otro navegador, o cómo puedo evitarlo abriendo un navegador nativo, para que la página se cargue en la propia vista web y no en un nuevo navegador.

Gracias a todos

Respuesta

3

El diseño debe algo similar a esto:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_height="fill_parent" 
       android:layout_width="fill_parent" 
       android:orientation="vertical"> 
     <LinearLayout 
      android:orientation="horizontal" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content"> 
      <Button android:id="@+id/button1" 
       android:layout_width="0dip" 
       android:layout_height="wrap_content"     
       android:layout_gravity="top" 
       android:layout_weight="1"/> 
      <Button android:id="@+id/button2" 
       android:layout_width="0dip" 
       android:layout_height="wrap_content"     
       android:layout_gravity="top" 
       android:layout_weight="1" /> 
     </LinearLayout> 
     <WebView 
      android:id="@+id/webview" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent"/> 
</LinearLayout> 

Y también se puede referir a la Need help changing from stock android browser to webview para ver si usted está lanzando la URL correctamente.

+1

gracias por ur reply..but mi problema sigue siendo el mismo. tan pronto como cargue la URL a la vista web, se necesita pantalla completa como si se abriera una nueva actividad o navegador sobre la aplicación. al hacer clic en el botón Atrás, me lleva a la aplicación donde puedo ver 2 botones y vista web que está en blanco y en blanco. – WISH

+0

puede compartir el código en la actividad principal de su sitio web ... solo las partes relevantes. Además, el código que lanza la url. – rajath

+0

xml es lo mismo que respondió. mi código de Java es: public void onCreate (Bundle savedInstanceState) { super.onCreate (savedInstanceState); setContentView (R.layout.main); browser = (WebView) findViewById (R.id.webView); browser.loadUrl ("http://www.google.com"); \t browser.getSettings(). SetJavaScriptEnabled (true); showPrevious = (Button) findViewById (R.id.showPrevious); showNext = (Button) findViewById (R.id.showNext); }); } – WISH

46

Ya. Debe implementar WebViewClient clase y OverrideshouldOverrideURLLoading() método en esta clase.

¿Por qué? Debido a que webview acaba de abrir su "enlace exactamente", si ese enlace redirige a otros enlaces, Android abrirá el navegador predeterminado para esta acción.

En su ejemplo, como usted sabe, cuando se conecta a google.com google se redirige a google en su país. Ejemplo, si se encuentra en China, google irá al google.com.cn, si está en Vietnam, será google.com.vn.

Aquí está mi ejemplo sencillo: (se puede imaginar esto es un navegador nuevo,: risas)

En primer lugar es el archivo de diseño xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <LinearLayout 
     android:layout_height="wrap_content" 
     android:layout_width="wrap_content"> 

     <EditText 
      android:id="@+id/url" 
      android:layout_height="wrap_content" 
      android:layout_width="fill_parent" 
      android:layout_weight="1" 
      android:hint="Input URL"/> 

     <Button 
      android:id="@+id/run" 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:layout_weight="0" 
      android:text="GO"/> 

    </LinearLayout> 

    <WebView 
     android:id="@+id/webview" 
     android:layout_height="fill_parent" 
     android:layout_width="fill_parent"/> 

</LinearLayout> 

Aquí es el código de la actividad principal:

package com.basic; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.webkit.WebSettings; 
import android.webkit.WebView; 
import android.webkit.WebViewClient; 
import android.widget.Button; 
import android.widget.EditText; 

public class WebViewExample extends Activity{ 

    WebView webView; 

    @Override 
    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.webview); 

     webView = (WebView) findViewById(R.id.webview); 

     Button button = (Button) findViewById (R.id.run); 
     button.setOnClickListener(new OnClickListener() {   
      @Override 
      public void onClick(View v) { 
       gotoPage();    
      } 
     }); 

    } 

    private void gotoPage(){ 

     EditText text = (EditText) findViewById(R.id.url); 
     String url = text.getText().toString(); 

     WebSettings webSettings = webView.getSettings(); 
     webSettings.setBuiltInZoomControls(true); 

     webView.setWebViewClient(new Callback()); //HERE IS THE MAIN CHANGE 
     webView.loadUrl(url); 

    } 

    private class Callback extends WebViewClient{ //HERE IS THE MAIN CHANGE. 

     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      return (false); 
     } 

    } 

} 

esperanza esta ayuda ti :)

+0

Tuve que implementar WebViewClient porque el webview.loadUrl() estaba abriendo el navegador directamente.Pero SOLAMENTE EN Xoom con ICS (4.0.3) funciona perfectamente bien con mi Acer Iconia 7 'en Honeycomb (3.2.1). ¿Alguna vez has escuchado algo así? –

21

añadiendo el siguiente código antes de LoadURL() t va a resolver su problema,

wv.setWebViewClient(new WebViewClient() { 
public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      view.loadUrl(url); 
      return true; 
      }}); 

El shouldOverrideUrlLoading() desde WebViewClient hace este trabajo. Aquí va el documento de Android para shouldOverrideUrlLoading,

Otorgue a la aplicación host la oportunidad de asumir el control cuando una nueva url esté a punto de cargarse en el WebView actual. Si no se proporciona WebViewClient, de manera predeterminada, WebView le solicitará a Activity Manager que elija el controlador adecuado para la url. Si se proporciona WebViewClient, return true significa que la aplicación host maneja la url, mientras que return false significa que la WebView actual maneja la url ...

http://developer.android.com/reference/android/webkit/WebViewClient.html#shouldOverrideUrlLoading%28android.webkit.WebView,%20java.lang.String%29

+3

gracias, funciona, ¿qué está pasando allí? – gray

+1

He editado la respuesta. – Sathesh

+1

cortar y limpiar ..., thankx –

1

Añadir la siguiente línea en el archivo XML, que tiene vistas web

tools:context=".MyActivity" (nombre de su actividad)

2

yo probamos este. está funcionando para mí. no abre una nueva ventana. solo abrirá la página webview. su escondite para nueva ventana del navegador abierta pidiendo ..

private WebView webView; 
String strUrl="url" ; 

webView = (WebView) findViewById(R.id.webView1); 
webView.getSettings().setJavaScriptEnabled(true); 
webView.loadUrl(strUrl); 
webView.setWebViewClient(new WebViewClient()); 
+3

Primero 'setWebViewClient' luego' loadUrl' – atulkhatri

1

Yo tenía el mismo problema y, afortunadamente, después de navegar por la web durante aproximadamente una hora que mezcla algunas de las cosas que encontré y funcionó.

este es el código:

WebView webView; 
webView = ((WebView) rootView.findViewById(R.id.detail_area)); 
webView.getSettings().setJavaScriptEnabled(true); 
webView.setWebViewClient(new WebViewClient()); 
webView.loadUrl(mItem.link); 

donde "detail_area" fue mi vista web, rootView era mi elemento seleccionado dentro de un "maestro/detalle de Flujo", enlace era la URL quería abrir.

+0

Esto funcionó para mí. ¡Gracias! –

7

Mi aplicación XML:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

<WebView 
    android:background="@android:color/transparent" 
    android:id="@+id/webView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"></WebView> 
</RelativeLayout> 

Mi Java aplicación:

WebView webView; 
public final String GlobalUrl = "http://slashdot.org/"; 

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

    webView = (WebView) findViewById(R.id.webView); 
    loadWebViewLoad(webView); 
} 

private void loadWebViewLoad(WebView webview) { 
    webview.getSettings().setJavaScriptEnabled(true); 
    webview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); 
    webview.getSettings().setSupportMultipleWindows(true); 
    webview.setWebViewClient(new WebViewClient()); 
    webview.setWebChromeClient(new WebChromeClient()); 
    webview.loadUrl(GlobalUrl); 
} 

y último resultado es:

Example image

Cuestiones relacionadas