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" />
Gilbou
fuente
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 );

    }

}
Gilbou
fuente
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;
    }
}
Farhana Haque
fuente
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());
Rahul
fuente
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.

Dipak Keshariya
fuente
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.

Pronab Roy
fuente
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");
    }   
}
Ankush Rawat
fuente
1

Puedes hacer esto.

webView = (WebView) findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("Your URL goes here");
KarthikKPN
fuente
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");
alicanozkara
fuente
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());
    }

}
Diseño Grafritz
fuente
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.
pankaj kumar
fuente
1

Agregar cliente WebView

mWebView.setWebViewClient(new WebViewClient());
luea099
fuente
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

Mirza Ahmed Baig
fuente
-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;
}
G. Anil Guptha
fuente
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