So laden Sie eine externe Webseite in WebView


120

Mein Problem ist, dass die Webseite nicht in die Webansicht geladen wird.

mWebview.loadUrl("http://www.google.com"); startet den Webbrowser ...

Dies ist der Code meiner Aktivität:

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

Ich habe die erforderliche Berechtigung im Manifest hinzugefügt:

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

Hallo Gilbou, dein Code funktioniert in 2.2
Dipak Keshariya

Aber nicht bei mir :( Weder auf dem HTC Wildfire noch auf dem Emulator ... Ich verstehe es einfach nicht.
Gilbou

1
Ok ... jetzt funktioniert es. Es wird jedoch der Webbrowser gestartet, anstatt die Seite in der Webansicht anzuzeigen.
Gilbou

Hallo, dies bedeutet, wenn UR diesen Code ausführt, ist der Browser geöffnet.
Dipak Keshariya

Sie brauchen wirklich dieses Tutorial Link Android Webview Beispiel
Athira Reddy

Antworten:


224

Dank dieses Beitrags habe ich endlich die Lösung gefunden. Hier ist der Code:

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

    }

}

Schöne Sache, aber ich möchte das Web seitenweise anzeigen. Ist es mit Webview möglich?
Zala Janaksinh

16
Vergessen Sie nicht, die Berechtigung hinzuzufügen <Verwendungsberechtigung android: name = "android.permission.INTERNET" />
star18bit

2
Um mit der URL in Ihrer Webansicht umgehen zu können, sollten Sie einen Webviewclient festlegen. Wenn Sie keinen Client festlegen, wird standardmäßig eine Anwendung gestartet, die URLs verarbeitet. Siehe diesen Link
erdemlal

2
Durch das Aktivieren des Java-Skripts wird Ihre App für potenzielle Sicherheitsprobleme geöffnet, und ich bin sicher, dass Android SDK Sie davor warnt, wenn Sie es im Code verwenden. Tun Sie dies nur, wenn Sie steuern können, welche Websites in Ihrer Webansicht angezeigt werden. Das Aktivieren von Java-Skripten sollte nicht als einfache Lösung angesehen werden.
LostPuppy

1
Diesen Code nicht öffnen. AnzeigenWebpage not available
Ranjith Kumar

44

Versuche dies

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

In Ihrer Aktivität:

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

Aktualisieren

Hinzufügen webView.setWebViewClient(new WebViewController()); Ihrer Aktivität hinzu.

WebViewController-Klasse:

public class WebViewController extends WebViewClient {

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

1
Es tut uns leid. Anscheinend habe ich etwas im Manifest geändert und jetzt funktioniert es auch. Trotzdem wird die Seite im Webbrowser geladen, nicht in der Webansicht.
Gilbou

Diese Zeile funktionierte für mich: webView.getSettings (). setJavaScriptEnabled (true);
pixparker

1
mWebview.getSettings (). setJavaScriptEnabled (true); hat für mich gearbeitet, wir müssen diese Zeile hinzufügen
neena

Dies ist eine schlechte Art, es zu tun. shouldOverrideUrlLoadingwird für alle in die Webansicht geladenen Seiten aufgerufen. Dies schließt iFrames ein. Wenn die Seite einen iFrame lädt, wird die Seite durch den iFrame ersetzt. Auf der entsprechenden Seite mit Android-Dokumenten wird davon abgeraten.
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
Ich setze einen benutzerdefinierten webViewClient auf meine Webansicht. In meinem benutzerdefinierten WebViewClient habe ich die Methode shouldOverrideUrlLoading überladen, um meine URL zu laden. Ich übergebe meine URL mit diesem loc: webview.loadUrl ("URL");
Rahul

Dies ist eine schlechte Art, es zu tun. shouldOverrideUrlLoadingwird für alle in die Webansicht geladenen Seiten aufgerufen. Dies schließt iFrames ein. Wenn die Seite einen iFrame lädt, wird die Seite durch den iFrame ersetzt. Auf der entsprechenden Seite mit Android-Dokumenten wird davon abgeraten.
Hack5

13

Bitte verwenden Sie diesen Code: -

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

Versuchen Sie diesen Code, wenn Sie Fragen haben.


1
Es klappt. Aber du hast 2 Dinge verpasst. Erstens haben Sie nicht gezeigt, dass eine Internetberechtigung erforderlich ist. Zweitens: Verwendung eines Hintergrundbilds. danke
Sumon Bappi

7

Es ist sehr einfach, diese Codezeilen zunächst in die Android Manifest- Datei zu integrieren

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

Schreiben Sie dann einen Code in Ihre 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>

Dann schreiben Sie diesen Code in Ihre 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");

}

}}

Versuchen Sie dies, es wird Ihnen helfen, Ihr Problem zu lösen


4

Gehen Sie einfach in die XML-Datei und geben Sie Ihrem WebView eine ID. Fügen Sie dann in Java die folgende Zeile ein:

   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

Sie können dies tun.

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

1

Versuche dies;

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

1

Fügen Sie die Internetberechtigung in AndroidManifest.xml hinzu

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

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

In Ihrer Aktivität

@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
Bitte verwenden Sie Englisch, da dies nur auf Englisch ist. In diesem Fall müssen nur 3 Zeilen übersetzt werden.
Scratte

1

Ich habe diesen Code verwendet, der cool war. habe aber einen fehler. "neterr_cleartext_not_permitted" zeigt, wenn Sie diesen Code verwenden, werden Sie auf dieses Problem stoßen .

Ich habe eine Lösung dafür. Sie müssen diese in Ihrer AndroidManifest.xml in der Nähe von über Anwendung hinzufügen

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

1

Fügen Sie den WebView-Client hinzu

mWebView.setWebViewClient(new WebViewClient());

0

Sie müssen den WebView-Client hinzufügen

mWebView.setWebViewClient(new WebViewClient() {

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

Sie können auch onPageFinished verwenden, um Aufgaben auszuführen, nachdem die Webansicht das Laden der Webseite abgeschlossen hat


-1

Fügen Sie die folgende Methode in Ihre Aktivitätsklasse ein. Hier ist der Browser nichts anderes als Ihr Webview-Objekt.

Jetzt können Sie das Web leicht seitenweise anzeigen.

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

Dies fügt der Schaltfläche "Zurück" am unteren Rand des Android-Telefons eine Funktion hinzu: Sie fungiert als Browser-Schaltfläche "Zurück".
Don Larynx
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.