zoukankan      html  css  js  c++  java
  • android基础---->WebView的使用

    webView的使用

    我们通过一个小的测试程序来体会webView的简单使用,项目结构如下:

    一、 webView加载页面,重写shouldOverrideUrlLoading方法,不使用系统默认的浏览器:

    private WebView webView;
    private EditText editText;
    private String htmlUrl = "file:///android_asset/index.html";
    
    private void initComponent() {
        webView = (WebView) findViewById(R.id.webView);
        editText = (EditText) findViewById(R.id.editText);
    }
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initComponent();
    
        webView.getSettings().setJavaScriptEnabled(true); // 支持javascript
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url); // 根据传入的参数再去加载新的网页
                return true; // 表示当前WebView可以处理打开新网页的请求,不用借助系统浏览器
            }
        });
    }

    二、 用webView加载url资源:

    // 请求url资源:
    public void searchURL(View view) {
        String urlStr = editText.getText().toString();
        webView.loadUrl(htmlUrl);
    }

    三、 用webView加载数据:

    // 加载html代码片断
    public void loadDataMethod(View view) {
        String summary = "<html><body>You scored <b>192</b> points.</body></html>";
        webView.loadData(summary, "text/html", "utf-8");
    }

    四、 我们还可心在请求的html资源中,加入带有andoroid支持的JS代码。例如在js中使用toast,首先我们定义一个类,供在js中调用:

    public class AppUseJSInterface {
        Context mContext;
    
        AppUseJSInterface(Context c) {
            mContext = c;
        }
    
        @JavascriptInterface
        public void showToast(String toast) {
            Toast.makeText(mContext, toast, Toast.LENGTH_LONG).show();
        }
    }

    接着我们在android代码中使用addJavascriptInterface方法,关联jsandroid

    // 请求html资源,在js中使用android
    public void searchHTML(View view) {
        // 给这个对象起的别名叫“huhxJS”
        webView.addJavascriptInterface(new AppUseJSInterface(this), "huhxJS");
        webView.loadUrl(htmlUrl);
    }

    最后我们在js中使用android定义的接口:

    <script type="text/javascript">
        function androidJS() {
            var username = document.getElementById("username").value;
            var password = document.getElementById("password").value;
            huhxJS.showToast("username: " + username + ", password: " + password);
        }
    </script>

    五、 我们还可以在andoird中调用js代码,如下:

    android调用js中的javascriptJS函数:

    // 在android中调用js
    public void useJSInAndroid(View view) {
        String name = "I love you";
        webView.loadUrl("javascript:javascriptJS('" + name + "')");
    }

    js中定义javascriptJS()函数:

    function javascriptJS(some) {
        huhxJS.showToast(some);
    }

    六、 实现webView的回退功能:

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // Check if the key event was the Back button and if there's history
        if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
            webView.goBack();
            return true;
        } else if (keyCode == KeyEvent.KEYCODE_FORWARD && webView.canGoForward()) {
            webView.goForward();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

    七、 测试加载用的页面:index.html

    <html>
        <head>
            <script type="text/javascript">
                function androidJS() {
                    var username = document.getElementById("username").value;
                    var password = document.getElementById("password").value;
                    huhxJS.showToast("username: " + username + ", password: " + password);
                }
                function javascriptJS(some) {
                    huhxJS.showToast(some);
                }
            </script>
        </head>
        <body>
            <form action="#" method="get">
                <font color="red">username:</font> <input type="text" id="username" name="username"><br>
                <font color="red">password:</font> <input type="password" id="password" name="password"><br>
                <input type="submit" value="submit">
            </form>
        <Button onclick="androidJS()">ClickOnMe</Button>
        </body>
    </html>

    友情链接

  • 相关阅读:
    JavaScript实现类的private、protected、public、static以及继承
    OSS网页上传和断点续传(STSToken篇)
    OSS网页上传和断点续传(OSS配置篇)
    Linq sum()时遇到NULL
    SQLSERVER事务日志已满 the transaction log for database 'xx' is full
    笔记本高分辨软件兼容问题,字体太小或模糊
    H5上传图片之canvas
    An error occurred while updating the entries. See the inner exception for details.
    无限级结构SQL查询所有的下级和所有的上级
    SQLserver 进程被死锁问题解决
  • 原文地址:https://www.cnblogs.com/huhx/p/webViewJS.html
Copyright © 2011-2022 走看看