Android-WebView加载网页(new WebView(this)方式)

之前的博客,都是 findViewById(R.id.webview);,来得到WebView, 此博客使用 new WebView(this)方式;

 

AndroidManifest.xml中配置网络访问权限:

   <!-- 网络访问权限 -->
    <uses-permission android:name="android.permission.INTERNET" />

Activity:

package cn.h5;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.webkit.JavascriptInterface;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

/**
 * WebView的另外种方式
 */
public class MainActivity6 extends AppCompatActivity {

    // 链接地址
    public static final String SERVER_HOST = "https://www.sina.com.cn";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        /**
         * 定义此WebView 用于去展现网络上的网页
         */
        WebView webView = new WebView(this);

        /**
         * 通过此WebView 获取到 WebSettings ,通过WebSettings设置WebView
         */
        WebSettings webSettings = webView.getSettings();

        /**
         * 设置支持JavaScript激活,可用等
         */
        webSettings.setJavaScriptEnabled(true);

        /**
         * 设置自身浏览器,注意:可用把WebView理解为浏览器,设置new WebViewClient()后,手机就不会跳转其他的浏览器
         */
        webView.setWebViewClient(new WebViewClient());

        /**
         * addJavascriptInterface是添加(给js调用-->Java方法)
         * JSHook里面的方法 就是给JavaScript调用的;
         * androidCallbackAction是JavaScript/HTML/H5那边定义定义的标识,所以必须和JavaScript/HTML/H5那边定义标识一致
         */
        webView.addJavascriptInterface(new JSHook(),"androidCallbackAction");

        webView.loadUrl(SERVER_HOST);

        /**
         * 设置好webView.loadUrl(SERVER_HOST);后,需要setContentView(webView);
         */
        setContentView(webView);
    }

    /**
     * 此JSHook类名是睡意取得
     * 也可以取名Wie JavaScriptCallbackJava
     *              JavaScriptToJava
     *              ......
     */
    class JSHook {

        /**
         * 给JavaScript调用的方法
         * 注意:方法名 方法参数 必须和 JavaScript/HTML/H5那边定义一致
         */
        @JavascriptInterface // 高版本需要加入此@JavascriptInterface
        public void javaScriptToJava1() {
            Log.d("@@@", "JavaScript调用当前此方法.....");
        }

        /**
         * 给JavaScript调用的方法
         * 注意:方法名 方法参数 必须和 JavaScript/HTML/H5那边定义一致
         */
        @JavascriptInterface // 高版本需要加入此@JavascriptInterface
        public void startToCallActivity() {
            Log.d("@@@", "JavaScript调用当前此方法.....");
        }

        /**
         * 给JavaScript调用的方法
         * 注意:方法名 方法参数 必须和 JavaScript/HTML/H5那边定义一致
         */
        @JavascriptInterface // 高版本需要加入此@JavascriptInterface
        public void updateListData() {
            Log.d("@@@", "JavaScript调用当前此方法.....");
        }

        /**
         * 给JavaScript调用的方法
         * 注意:方法名 方法参数 必须和 JavaScript/HTML/H5那边定义一致
         */
        @JavascriptInterface // 高版本需要加入此@JavascriptInterface
        public void requestByID(int id, String flag) {
            Log.d("@@@", "JavaScript调用当前此方法.....");
        }

        /**
         * 给JavaScript调用的方法
         * 注意:方法名 方法参数 必须和 JavaScript/HTML/H5那边定义一致
         */
        @JavascriptInterface // 高版本需要加入此@JavascriptInterface
        public String getThisInfoData() {
            Log.d("@@@", "JavaScript调用当前此方法.....");
            return "ljfr4sfdsfs";
        }

        /**
         * JavaScript/HTML/H5 那边定义要回调Android的Java 哪些方法,就可用在JSHook中定义
         * 注意:方法名 方法参数 必须和 JavaScript/HTML/H5那边定义一致
         */
    }
}

执行结果:

原文地址:https://www.cnblogs.com/android-deli/p/10339179.html