Cara memuat halaman web eksternal di dalam WebView


120

Masalah saya adalah halaman web tidak dimuat di dalam tampilan web.

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

Ini adalah kode aktivitas saya:

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

Saya menambahkan izin yang diperlukan dalam Manifes:

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

Halo Gilbou Kode Anda Bekerja di 2.2
Dipak Keshariya

Tapi tidak dengan saya :( Baik di HTC Wildfire, tidak juga di Emulator ... Saya hanya tidak mengerti.
Gilbou

1
Oke ... sekarang berhasil. Tapi itu meluncurkan browser web alih-alih menampilkan halaman di dalam tampilan web.
Gilbou

Halo, ini berarti Jika UR Jalankan kode ini, Browser terbuka.
Dipak Keshariya

Anda benar-benar membutuhkan tautan tutorial ini contoh
tampilan

Jawaban:


224

Berkat postingan ini , akhirnya saya menemukan solusinya. Ini kodenya:

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

    }

}

Hal yang bagus tetapi saya ingin Menampilkan web berisi halaman yang bijaksana. Apakah mungkin menggunakan tampilan web?
Zala Janaksinh

16
Jangan lupa untuk menambahkan Izin <menggunakan-izin android: name = "android.permission.INTERNET" />
star18bit

2
Sebenarnya, untuk menangani dengan url di dalam tampilan web Anda, Anda harus menyetel klien web. Jika Anda tidak menyetel klien, perilaku defaultnya adalah meluncurkan aplikasi yang menangani URL. Lihat tautan ini
erdemlal

2
Mengaktifkan java script membuka aplikasi Anda terhadap potensi masalah keamanan dan saya yakin android sdk memperingatkan Anda terhadapnya saat Anda menggunakannya dalam kode. Jangan lakukan ini kecuali Anda dapat mengontrol situs web mana yang Anda tampilkan di tampilan web Anda dan mengaktifkan skrip java tidak boleh dilihat sebagai solusi yang mudah.
LostPuppy

1
Tidak membuka kode ini .. MenampilkanWebpage not available
Ranjith Kumar

44

coba ini

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

Dalam Aktivitas Anda:

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

Memperbarui

Tambahkan webView.setWebViewClient(new WebViewController());ke Aktivitas Anda.

Kelas WebViewController:

public class WebViewController extends WebViewClient {

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

1
Maaf. Sepertinya saya mengubah sesuatu dalam manifes dan sekarang berhasil juga. namun tetap saja, halaman tersebut dimuat di browser web, bukan di tampilan web.
Gilbou

baris ini bekerja untuk saya: webView.getSettings (). setJavaScriptEnabled (true);
pixparker

1
mWebview.getSettings (). setJavaScriptEnabled (true); bekerja untuk saya, kita harus menambahkan baris ini
neena

Ini adalah cara yang buruk untuk melakukannya. shouldOverrideUrlLoadingdipanggil untuk semua halaman yang dimuat dalam tampilan web. Ini termasuk iFrame, artinya jika halaman memuat iFrame, halaman tersebut akan diganti dengan iFrame. Hal ini tidak disarankan pada halaman dokumen android yang relevan.
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
Saya menyetel webViewClient kustom ke tampilan web saya. Di WebViewClient yang dibuat khusus, saya telah membebani metode shouldOverrideUrlLoading untuk memuat url saya. Saya meneruskan url saya dengan loc: webview.loadUrl ("URL");
Rahul

Ini adalah cara yang buruk untuk melakukannya. shouldOverrideUrlLoadingdipanggil untuk semua halaman yang dimuat dalam tampilan web. Ini termasuk iFrame, artinya jika halaman memuat iFrame, halaman tersebut akan diganti dengan iFrame. Hal ini tidak disarankan pada halaman dokumen android yang relevan.
Hack5

13

Silakan gunakan kode ini: -

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

Coba kode ini jika ada pertanyaan yang bertanya kepada saya.


1
berhasil. Tapi Anda melewatkan 2 hal. Pertama, Anda tidak menunjukkan izin internet diperlukan, Kedua, penggunaan gambar latar belakang. terima kasih
Sumon Bappi

7

Ini sangat sederhana, coba integrasikan baris kode ini terlebih dahulu, ambil izin di file Manifes Android

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

lalu tulis beberapa kode di Activity.xml Anda

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

Kemudian tulis kode ini di MainActivity.java Anda

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

}

}

Coba ini akan membantu Anda memecahkan masalah Anda


4

cukup masuk ke file XML dan berikan id ke webView Anda lalu di java paste baris ini:

   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

Anda bisa melakukan seperti ini.

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

1

coba ini;

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

1

Tambahkan izin Internet di AndroidManifest.xml

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

Dalam Tata Letak Anda:

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

Dalam Aktivitas Anda

@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
Mohon gunakan bahasa Inggris, karena ini adalah situs hanya dalam bahasa Inggris. Dalam hal ini hanya 3 baris yang perlu diterjemahkan.
Scratte

1

Saya menggunakan kode ini yang keren. tetapi ada kesalahan. "neterr_cleartext_not_permitted" muncul ketika Anda menggunakan kode ini maka Anda akan menghadapi masalah ini ..

Saya mendapat solusi untuk ini. Anda harus menambahkan ini di AndroidManifest.xml Anda dekat tentang Aplikasi

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

1

Tambahkan Klien WebView

mWebView.setWebViewClient(new WebViewClient());

0

Anda perlu menambahkan klien WebView

mWebView.setWebViewClient(new WebViewClient() {

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

Anda juga dapat menggunakan onPageFinished untuk melakukan tugas setelah tampilan web selesai memuat halaman web


-1

Tambahkan metode di bawah ini di kelas aktivitas Anda. Di sini browser tidak lain adalah objek tampilan web Anda.

Sekarang Anda dapat melihat halaman berisi web dengan mudah.

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

Ini menambahkan fungsionalitas ke tombol "kembali" di bagian bawah ponsel Android: Ini berfungsi sebagai tombol browser "kembali".
Don Larynx
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.