Cómo cargar una página web externa dentro de WebView


120

Mi problema es que la página web no se carga dentro de la vista web.

mWebview.loadUrl("http://www.google.com"); inicia el navegador web ...

Este es el código de mi actividad:

import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebView;

public class Main extends Activity {

    private WebView mWebview;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mWebview = new WebView(this);
        mWebview.loadUrl("http://www.google.com");
        setContentView(mWebview);
    }   
}

Agregué el permiso requerido en el manifiesto:

<uses-permission android:name="android.permission.INTERNET" />

Hola Gilbou, tu código funciona en 2.2
Dipak Keshariya

Pero no conmigo :( Ni en HTC Wildfire, ni en el Emulador ... Simplemente no entiendo.
Gilbou

1
Ok ... ahora funciona. Pero inicia el navegador web en lugar de mostrar la página dentro de la vista web.
Gilbou

Hola, esto significa que si UR Ejecuta este código, el navegador está abierto.
Dipak Keshariya

Realmente necesitas este enlace tutorial ejemplo de vista web de Android
Athira Reddy

Respuestas:


224

Gracias a esta publicación , finalmente encontré la solución. Aquí está el código:

import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebResourceError;
import android.webkit.WebResourceRequest;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
import android.annotation.TargetApi;

public class Main extends Activity {

    private WebView mWebview ;

    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        mWebview  = new WebView(this);

        mWebview.getSettings().setJavaScriptEnabled(true); // enable javascript

        final Activity activity = this;

        mWebview.setWebViewClient(new WebViewClient() {
            @SuppressWarnings("deprecation")
            @Override
            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                Toast.makeText(activity, description, Toast.LENGTH_SHORT).show();
            }
            @TargetApi(android.os.Build.VERSION_CODES.M)
            @Override
            public void onReceivedError(WebView view, WebResourceRequest req, WebResourceError rerr) {
                // Redirect to deprecated method, so you can use it in all SDK versions
                onReceivedError(view, rerr.getErrorCode(), rerr.getDescription().toString(), req.getUrl().toString());
            }
        });

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

    }

}

Lo bueno, pero quiero mostrar la página de contenido web. ¿Es posible usar webview?
Zala Janaksinh

16
No olvide agregar el permiso <uses-allow android: name = "android.permission.INTERNET" />
star18bit

2
En realidad, para manejar la url dentro de su vista web, debe configurar un cliente de vista web, si no configura un cliente, el comportamiento predeterminado es iniciar una aplicación que maneje las URL. Ver este enlace
erdemlal

2
Habilitar el script java abre su aplicación a posibles problemas de seguridad y estoy seguro de que el sdk de Android le advierte cuando lo usa en el código. No haga esto a menos que pueda controlar qué sitios web muestra en su vista web y habilitar el script java no debe verse como una solución fácil.
LostPuppy

1
No abrir este código .. MostrandoWebpage not available
Ranjith Kumar

44

prueba esto

webviewlayout.xml:

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

En tu actividad:

WebView webView;
setContentView(R.layout.webviewlayout);
webView = (WebView)findViewById(R.id.help_webview);
webView.getSettings().setJavaScriptEnabled(true);
webview.loadUrl("http://www.google.com");

Actualizar

Agregue webView.setWebViewClient(new WebViewController());a su actividad.

Clase WebViewController:

public class WebViewController extends WebViewClient {

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

1
lo siento. Parece que cambié algo en el manifiesto y ahora también funciona. pero aún así, la página se carga en el navegador web, no en la vista web.
Gilbou

esta línea funcionó para mí: webView.getSettings (). setJavaScriptEnabled (true);
pixparker

1
mWebview.getSettings (). setJavaScriptEnabled (verdadero); funcionó para mí, tenemos que agregar esta línea
neena

Esta es una mala forma de hacerlo. shouldOverrideUrlLoadingse llama para todas las páginas cargadas en la vista web. Esto incluye iFrames, lo que significa que si la página carga un iFrame, la página será reemplazada por el iFrame. Esto no se recomienda en la página de documentos de Android correspondiente.
Hack5

19
public class WebViewController extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
}
webView.setWebViewClient(new WebViewController());

1
Estoy configurando un webViewClient personalizado para mi vista web. En mi WebViewClient personalizado, he sobrecargado el método shouldOverrideUrlLoading para cargar mi URL. Estoy pasando mi URL con esta ubicación: webview.loadUrl ("URL");
Rahul

Esta es una mala forma de hacerlo. shouldOverrideUrlLoadingse llama para todas las páginas cargadas en la vista web. Esto incluye iFrames, lo que significa que si la página carga un iFrame, la página será reemplazada por el iFrame. Esto no se recomienda en la página de documentos de Android correspondiente.
Hack5

13

Utilice este código: -

Main.Xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="fill_parent"
    android:layout_height="fill_parent" android:background="@drawable/background">
    <RelativeLayout android:layout_width="fill_parent"
        android:layout_height="wrap_content" android:background="@drawable/top_heading"
        android:id="@+id/rlayout1">
        <TextView android:layout_width="wrap_content"
            android:layout_centerVertical="true" android:layout_centerHorizontal="true"
            android:textColor="#ffffff" android:textSize="22dip"
            android:textStyle="bold" android:layout_height="wrap_content"
            android:text="More Information" android:id="@+id/txtviewfbdisplaytitle" />
    </RelativeLayout>
    <RelativeLayout android:layout_width="fill_parent"
        android:layout_height="fill_parent" android:layout_below="@+id/rlayout1"
        android:id="@+id/rlayout2">
        <WebView android:id="@+id/webview1" android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1.0" />
    </RelativeLayout>
</RelativeLayout>

MainActivity.Java

public class MainActivity extends Activity {
    private class MyWebViewClient extends WebViewClient {
          @Override
          public boolean shouldOverrideUrlLoading(WebView view, String url) {
              view.loadUrl(url);
              return true;
          }
    }
    Button btnBack;
    WebView webview;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        webview=(WebView)findViewById(R.id.webview1);
        webview.setWebViewClient(new MyWebViewClient());
        openURL();
    }

     /** Opens the URL in a browser */
    private void openURL() {
        webview.loadUrl("http://www.google.com");
        webview.requestFocus();
    }
}

Prueba este código si alguna consulta me pregunta.


1
funciona. Pero te perdiste 2 cosas. Primero, no mostró que se necesita permiso de Internet. Segundo, uso de la imagen de fondo. gracias
Sumon Bappi

7

Es muy simple, intente integrar estas líneas de código, primero obtenga el permiso en el archivo de manifiesto de Android

<uses-permission android:name="android.permission.INTERNET" />

luego escribe un código en tu Activity.xml

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

<WebView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/help_webview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

/>

</LinearLayout>

Luego escribe este código en tu MainActivity.java

import android.app.Activity;
import android.content.Intent;
import android.content.res.Resources;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Window;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

public class MainActivity extends Activity{
    private WebView mWebview ;
    String link = "";// global variable
    Resources res;// global variable
    @Override


      protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            setContentView(R.layout.activity_modernherbal_main);
            mWebview  = (WebView) findViewById(R.id.help_webview);
            WebSettings webSettings = mWebview.getSettings();
            webSettings.setJavaScriptEnabled(true);
            webSettings.setUseWideViewPort(true);
            webSettings.setLoadWithOverviewMode(true);



        final Activity activity = this;

        mWebview.setWebViewClient(new WebViewClient() {
            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
                Toast.makeText(activity, description, Toast.LENGTH_SHORT).show();
            }


});

    mWebview .loadUrl("http://www.example.com");

}

}

Prueba esto te ayudará a resolver tu problema.


4

simplemente ingrese al archivo XML y proporcione una identificación a su webView y luego en Java pegue estas líneas:

   public class Main extends Activity {

private WebView mWebview;

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

    mWebview = (WebView)findViewById(R.id.id_you_gave _to_your_wenview_in_xml);
    mWebview.loadUrl("http://www.google.com");
    }   
}

1

Puedes hacer esto.

webView = (WebView) findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("Your URL goes here");

1

prueba esto;

webView.loadData("<iframe src='http://www.google.com' style='border: 0; width: 100%; height: 100%'></iframe>", "text/html; charset=utf-8", "UTF-8");

1

Agregar permiso de Internet en AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET" />

En su diseño:

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

En tu actividad

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

    try {
        progressDialog = new ProgressDialog(this);
        url_Api = "https://docs.microsoft.com/en-us/learn";

        webView = this.findViewById(R.id.webView);

            progressDialog.setMessage(getString(R.string.connection_Wait));
            progressDialog.setIndeterminate(false);
            progressDialog.setCancelable(true);
            progressDialog.show();

            LoadUrlWebView( url_Api );
    }catch (Exception e){
        Log.w(TAG, "onCreate", e);
    }
}

private void LoadUrlWebView( String url_api ) {
    try {
        webView.setWebViewClient(new WebViewClient());
        webView.setWebChromeClient(new MyWebChromeClient( url_api ));
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setSupportZoom(true);
        webView.getSettings().setAllowContentAccess(true);
        webView.getSettings().setBuiltInZoomControls(true);
        webView.getSettings().setDisplayZoomControls(false);

        webView.loadUrl(url_api);
    } catch (Exception e) {
        Log.w(TAG, "setUpNavigationView", e);
    }
}

private class MyWebChromeClient extends WebChromeClient {
    private String urlAccount;

    public MyWebChromeClient( String urlAccount ) {
        this.urlAccount = urlAccount;
    }

    @Override
    public void onProgressChanged(WebView view, int newProgress) {
        try {
            //Tools.LogCat(context, "INSIDE MyWebChromeClient | onProgressChanged / newProgress1:" + newProgress);
            progressDialog.setMessage(newProgress + "% " + getString(R.string.connection_Wait));
            if (newProgress < 100 && !progressDialog.isShowing()) {
                if (progressDialog != null)
                    progressDialog.show();
            }
            if (newProgress == 100) {
                if (progressDialog != null)
                    progressDialog.dismiss();
            }
        }catch (Exception e){
            Log.w( "onProgressChanged", e);
        }
    }

    @Override
    public void onReceivedTitle(WebView view, String title) {
        super.onReceivedTitle(view, title);

        sharedPreferences = new Shared_Preferences( context );
        sharedPreferences.setPageWebView(view.getUrl());
    }

}

1
Por favor use inglés, ya que este es un sitio solo en inglés. En este caso, solo es necesario traducir 3 líneas.
Scratte

1

Usé este código que fue genial. pero tengo un error. "neterr_cleartext_not_permitted" aparece cuando usa este código, entonces enfrentará este problema.

Tengo una solución para esto. Tienes que agregar esto en tu AndroidManifest.xml cerca de la aplicación

android:usesCleartextTraffic="true"
<uses-permission android:name="android.permission.INTERNET" /> // ignore if you already added. outside of Application.

1

Agregar cliente WebView

mWebView.setWebViewClient(new WebViewClient());

0

Necesita agregar el cliente WebView

mWebView.setWebViewClient(new WebViewClient() {

   public void onPageFinished(WebView view, String url) {
        // do your stuff here
    }
});

también puede usar onPageFinished para hacer la tarea después de que la vista web termine de cargar la página web


-1

Agregue el método siguiente en su clase de actividad. Aquí el navegador no es más que su objeto de vista web.

Ahora puede ver la página web fácilmente.

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK) && browser.canGoBack()) {
        browser.goBack();
        return true;
    }
    return false;
}

Esto agrega una funcionalidad al botón "atrás" en la parte inferior del teléfono Android: funciona como un botón del navegador "atrás".
Don Larynx
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.