• Android WebView的使用方法总结


    本文主要讲解WebView的一些常用使用方法

    代码如下:

    xml文件:


    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

        xmlns:tools="http://schemas.android.com/tools"

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:orientation="vertical" >

        <WebView

            android:id="@+id/webView1"

            android:layout_width="match_parent"

            android:layout_height="0dip"

            android:layout_weight="1" />

            <ProgressBar

                android:id="@+id/progressBar1"

                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal" />
    </LinearLayout>

    1.AndroidManifest.xml中必须使用许可"android.permission.INTERNET",否则会出Web page not available错误。

    2.如果访问的页面中有Javascript,则webview必须设置支持Javascript。
            webview.getSettings().setJavaScriptEnabled(true);

    3.如果页面中链接,如果希望点击链接继续在当前browser中响应,而不是新开Android的系统browser中响应该链接,必须覆盖 webview的WebViewClient对象。

    webView.setWebViewClient(new WebViewClient() {
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    view.loadUrl(url);
                    return true;
                }
            });

    4.如果不做任何处理,浏览网页,点击系统“Back”键,整个Browser会调用finish()而结束自身,如果希望浏览的网 页回退而不是推出浏览器,需要在当前Activity中处理并消费掉该Back事件。


    public boolean onKeyDown(int keyCode, KeyEvent event) {
            if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {

                webView.goBack();
                return true;
            }
            return super.onKeyDown(keyCode, event);
        }

    5.android中webview支持javascript自定义对象

    a.设置webview支持javascript.  webSettings.setJavaScriptEnabled(true);

    b.绑定android对象到javascript对象. addJavascriptInterface(Object obj,String interfaceName);

    c.页面中调用javascript对象. javascript:window.demo.方法名称();

    在w3c标准中js有 window,history,document等标准对象,同样我们可以在开发浏览器时自己定义我们的对象调用手机系统功能来处理,这样使用js就可以 为所欲为了。


    public class WebViewDemo extends Activity {

        private WebView mWebView;

        private Handler mHandler = new Handler();

        public void onCreate(Bundle icicle) {

            super.onCreate(icicle);

            setContentView(R.layout.webviewdemo);

            mWebView = (WebView) findViewById(R.id.webview);

            WebSettings webSettings = mWebView.getSettings();

            webSettings.setJavaScriptEnabled(true);

            mWebView.addJavascriptInterface(new Object() {
                public void clickOnAndroid() {
                    mHandler.post(new Runnable() {
                        public void run() {
                            mWebView.loadUrl("javascript:wave()");
                        }
                    });
                }
            }, "demo");
            mWebView.loadUrl("file:///android_asset/demo.html");
        }
    }
    6.WebView控制进度

    webView.setWebChromeClient(new WebChromeClient() {

                public void onProgressChanged(WebView view, int progress) {

                    setTitle("页面加载中,请稍候..." + progress + "%");

                    setProgress(progress * 100);

                    if (progress == 100) {

                        setTitle(R.string.app_name);

                        progressBar.setVisibility(4);

                    }

                }

            });

    最后把MainActivity的代码贴上
    package com.example.webviewdemo;
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.KeyEvent;
    import android.view.Menu;
    import android.webkit.WebChromeClient;
    import android.webkit.WebView;
    import android.webkit.WebViewClient;
    import android.widget.ProgressBar;

    public class MainActivity extends Activity {
        WebView webView;
        ProgressBar progressBar;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            webView = (WebView) findViewById(R.id.webView1);
            progressBar = (ProgressBar) findViewById(R.id.progressBar1);
            webView.getSettings().setJavaScriptEnabled(true);
            webView.loadUrl("https://m.empireblue.com/mobile/providerfinder/home");
            webView.setWebViewClient(new WebViewClient() {
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    view.loadUrl(url);
                    return true;
                }
            });

            webView.setWebChromeClient(new WebChromeClient() {

                public void onProgressChanged(WebView view, int progress) {

                    setTitle("页面加载中,请稍候..." + progress + "%");

                    setProgress(progress * 100);

                    if (progress == 100) {

                        setTitle(R.string.app_name);
                        progressBar.setVisibility(4);

                    }

                }

            });

        }

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

        public boolean onCreateOptionsMenu(Menu menu) {

            getMenuInflater().inflate(R.menu.main, menu);

            return true;

        }
    }

  • 相关阅读:
    AndroidStudio开发体温上报系统------问题总结
    AndroidStudio--app是如何运行的
    sqlite操作
    sqlite数据库
    Android Service
    echart自定义主题
    vue监听数组变化
    Django:数据库驱动安装
    pycharm链接mysql报错: Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' property manually.
    Django2.2:UnicodeDecodeError: 'gbk' codec can't decode byte 0xa6 in position 9737: illegal multibyte sequence
  • 原文地址:https://www.cnblogs.com/tyjsjl/p/3603247.html
Copyright © 2020-2023  润新知