WebView'da harici web sayfası nasıl yüklenir


120

Benim sorunum, web sayfasının web görünümünün içine yüklenmemiş olmasıdır.

mWebview.loadUrl("http://www.google.com"); web tarayıcısını başlatır ...

Bu benim faaliyetimin kodu:

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

Manifest'e gerekli izni ekledim:

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

Merhaba Gilbou, Kodunuz Çalışıyor 2.2
Dipak Keshariya

Ama benimle değil :( Ne HTC Wildfire'da, ne Emülatörde ... Sadece anlamıyorum.
Gilbou

1
Tamam ... şimdi çalışıyor. Ancak sayfayı web görünümünün içinde göstermek yerine web tarayıcısını başlatır.
Gilbou

Merhaba, bu, UR Bu kodu çalıştırırsa Tarayıcı açık demektir.
Dipak Keshariya

Gerçekten bu öğretici bağlantısına ihtiyacınız var android
webview

Yanıtlar:


224

Bu yazı sayesinde sonunda çözümü buldum. İşte kod:

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

    }

}

Güzel bir şey ama web sayfasını akıllıca içeren görüntülemek istiyorum. Webview kullanarak mümkün mü?
Zala Janaksinh

16
İzin <uses-
allow

2
Aslında, web görünümünüzün içindeki url ile başa çıkmak için bir webviewclient ayarlamalısınız, eğer bir istemci ayarlamazsanız, varsayılan davranış URL'leri işleyen bir uygulama başlatmaktır. Bu bağlantıya
erdemlal

2
Java komut dosyasını etkinleştirmek, uygulamanızı olası güvenlik sorunlarına açar ve eminim android sdk, kodda kullandığınızda sizi buna karşı uyarır. Web görünümünüzde hangi web sitelerini görüntülediğinizi kontrol edemedikçe bunu yapmayın ve java komut dosyasını etkinleştirmek kolay bir çözüm olarak görülmemelidir.
LostPuppy

1
Bu kod Webpage not available
açılmıyor

44

bunu dene

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

Etkinliğinizde:

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

Güncelleme

Ekle webView.setWebViewClient(new WebViewController());Aktivitenize .

WebViewController sınıfı:

public class WebViewController extends WebViewClient {

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

1
afedersiniz. Görünüşe göre manifestte bir şeyi değiştirdim ve şimdi de çalışıyor. ancak yine de sayfa web görünümüne değil web tarayıcısına yüklenir.
Gilbou

bu satır benim için çalıştı: webView.getSettings (). setJavaScriptEnabled (true);
pixparker

1
mWebview.getSettings () setJavaScriptEnabled (doğru).; benim için çalıştı, bu satırı eklemeliyiz
neena

Bu, bunu yapmanın kötü bir yolu. shouldOverrideUrlLoadingweb görünümünde yüklenen tüm sayfalar için çağrılır. Bu, iFrame'leri içerir, yani sayfa bir iFrame yüklerse, sayfa iFrame ile değiştirilir. Bu, ilgili android dokümanlar sayfasında önerilmemektedir.
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
Web görünümüme özel bir webViewClient ayarlıyorum. Özel yapılmış WebViewClient'imde, url'mi yüklemek için shouldOverrideUrlLoading yöntemini aşırı yükledim. URL'mi şu loc ile geçiriyorum: webview.loadUrl ("URL");
Rahul

Bu, bunu yapmanın kötü bir yolu. shouldOverrideUrlLoadingweb görünümünde yüklenen tüm sayfalar için çağrılır. Bu, iFrame'leri içerir, yani sayfa bir iFrame yüklerse, sayfa iFrame ile değiştirilir. Bu, ilgili android dokümanlar sayfasında önerilmemektedir.
Hack5

13

Lütfen bu kodu kullanın: -

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

Herhangi bir sorunuz olursa bu kodu deneyin.


1
işe yarıyor. Ama 2 şeyi kaçırdın. Birincisi, internet iznine ihtiyaç olduğunu göstermediniz, İkincisi, arka plan görüntüsünün kullanılması. teşekkürler
Sumon Bappi

7

Çok basit, bu kod satırlarını entegre etmeyi deneyin, önce Android Manifest dosyasında izin alın

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

sonra Activity.xml dosyanıza biraz kod yazın

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

Ardından bu kodu MainActivity.java dosyanıza yazın

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

}

}

Bunu deneyin, sorununuzu çözmenize yardımcı olacak


4

XML dosyasına gidin ve webView'ınıza id verin, ardından java'da şu satırı yapıştırın:

   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

Bunu beğenebilirsin.

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

1

bunu dene;

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

1

AndroidManifest.xml'de İnternet izni ekleyin

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

Düzeninizde:

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

Aktivitenizde

@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
Bu yalnızca İngilizce bir site olduğu için lütfen İngilizce kullanın. Bu durumda, çevrilmesi gereken sadece 3 satırdır.
Scratte

1

Harika olan bu kodu kullandım. ama bir hata var. Bu kodu kullandığınızda "neterr_cleartext_not_perlied" gösteriliyorsa, bu sorunla karşılaşacaksınız ..

Bunun için bir çözüm buldum. Bunu, Uygulama hakkında AndroidManifest.xml dosyanıza eklemelisiniz

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

1

WebView İstemcisi Ekle

mWebView.setWebViewClient(new WebViewClient());

0

WebView istemcisi eklemeniz gerekiyor

mWebView.setWebViewClient(new WebViewClient() {

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

ayrıca, web sayfasını yükledikten sonra görev yapmak için onPageFinished'yi kullanabilirsiniz


-1

Aktivite sınıfınıza aşağıdaki yöntemi ekleyin Buradaki tarayıcı sizin webview nesnenizden başka bir şey değildir.

Artık web içeren sayfayı kolayca görüntüleyebilirsiniz.

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

Bu, Android telefonun altındaki "geri" düğmesine bir işlevsellik ekler: "geri" tarayıcı düğmesi olarak çalışır.
Don Larynx
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.