Come caricare una pagina web esterna all'interno di WebView


120

Il mio problema è che la pagina web non viene caricata nella visualizzazione web.

mWebview.loadUrl("http://www.google.com"); avvia il browser web ...

Questo è il codice della mia attività:

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);
    }   
}

Ho aggiunto l'autorizzazione richiesta nel Manifest:

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

Ciao Gilbou, il tuo codice funziona in 2.2
Dipak Keshariya

Ma non con me :( Né su HTC Wildfire, né
sull'emulatore

1
Ok ... ora funziona. Ma avvia il browser web invece di mostrare la pagina all'interno della visualizzazione web.
Gilbou

Ciao, questo significa che se UR esegui questo codice il browser è aperto.
Dipak Keshariya

Hai davvero bisogno di questo esempio di visualizzazione web Android
Athira Reddy

Risposte:


224

Grazie a questo post ho finalmente trovato la soluzione. Ecco il codice:

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 );

    }

}

Bella cosa ma voglio visualizzare la pagina web che contiene wise.it è possibile usare webview?
Zala Janaksinh

16
Non dimenticare di aggiungere l'autorizzazione <uses-permission android: name = "android.permission.INTERNET" />
star18bit

2
In realtà, per gestire l'URL all'interno della tua webview dovresti impostare un webviewclient, se non imposti un client, il comportamento predefinito è quello di avviare un'applicazione che gestisce gli URL. Vedi questo link
erdemlal

2
L'abilitazione di java script apre la tua app a potenziali problemi di sicurezza e sono sicuro che Android SDK ti avverte quando lo usi nel codice. Non farlo a meno che tu non possa controllare quali siti web visualizzare nella tua visualizzazione web e l'abilitazione di java script non dovrebbe essere vista come una soluzione facile.
LostPuppy

1
Non aprire questo codice .. VisualizzazioneWebpage not available
Ranjith Kumar

44

prova questo

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"
/>

Nella tua attività:

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

Aggiornare

Aggiungi webView.setWebViewClient(new WebViewController());alla tua attività.

Classe WebViewController:

public class WebViewController extends WebViewClient {

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

1
spiacente. sembra che ho cambiato qualcosa nel manifest e ora funziona anche lui. tuttavia, la pagina viene caricata nel browser web, non nella visualizzazione web.
Gilbou

questa riga ha funzionato per me: webView.getSettings (). setJavaScriptEnabled (true);
pixparker

1
mWebview.getSettings () setJavaScriptEnabled (true).; ha funzionato per me, dobbiamo aggiungere questa riga
neena

Questo è un cattivo modo di farlo. shouldOverrideUrlLoadingviene chiamato per tutte le pagine caricate nella visualizzazione web. Ciò include iFrame, il che significa che se la pagina carica un iFrame, la pagina verrà sostituita dall'iFrame. Questo è sconsigliato nella pagina della documentazione Android pertinente.
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
Sto impostando un webViewClient personalizzato per la mia visualizzazione web. Nel mio WebViewClient personalizzato, ho sovraccaricato il metodo shouldOverrideUrlLoading per caricare il mio URL. Sto passando il mio URL con questa loc: webview.loadUrl ("URL");
Rahul

Questo è un cattivo modo di farlo. shouldOverrideUrlLoadingviene chiamato per tutte le pagine caricate nella visualizzazione web. Ciò include iFrame, il che significa che se la pagina carica un iFrame, la pagina verrà sostituita dall'iFrame. Questo è sconsigliato nella pagina della documentazione Android pertinente.
Hack5

13

Si prega di utilizzare questo codice: -

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();
    }
}

Prova questo codice se qualsiasi domanda me lo chiede.


1
Funziona. Ma ti sei perso 2 cose. Primo, non hai mostrato che è necessaria l'autorizzazione a Internet, Secondo, uso dell'immagine di sfondo. grazie
Sumon Bappi

7

È molto semplice provare a integrare queste righe di codice prima di prendere l'autorizzazione nel file manifest di Android

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

quindi scrivi del codice in 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>

Quindi scrivi questo codice nel tuo 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");

}

}

Prova questo ti aiuterà a risolvere il tuo problema


4

basta andare nel file XML e dare l'ID al tuo webView, quindi in java incollare queste righe:

   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

Puoi fare così.

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

1

prova questo;

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

1

Aggiungi l'autorizzazione Internet in AndroidManifest.xml

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

Nel tuo layout:

<?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"
 />

Nella tua attività

@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
Si prega di utilizzare l'inglese, poiché questo è un sito solo in inglese. In questo caso sono solo 3 le righe che devono essere tradotte.
Scratte

1

Ho usato questo codice che era fantastico. ma ho un errore. "neterr_cleartext_not_permitted" mostra quando usi questo codice, allora dovrai affrontare questo problema ..

Ho una soluzione per questo. Devi aggiungerlo nel tuo AndroidManifest.xml vicino all'applicazione

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

1

Aggiungi client WebView

mWebView.setWebViewClient(new WebViewClient());

0

È necessario aggiungere il client WebView

mWebView.setWebViewClient(new WebViewClient() {

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

inoltre è possibile utilizzare onPageFinished per eseguire l'attività dopo che la visualizzazione sul Web ha completato il caricamento della pagina Web


-1

Aggiungi sotto il metodo nella tua classe di attività.Qui il browser non è altro che il tuo oggetto webview.

Ora puoi visualizzare facilmente le pagine web che contengono.

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

Questo aggiunge una funzionalità al pulsante "indietro" nella parte inferiore del telefono Android: funziona come un pulsante del browser "indietro".
Don Larynx
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.