将HTML5封装成APK有好几种方法,这里紧记录下我用andorid studio封装的方法
第一步:打开AS新建一个项目;
第二步:配置MainActivity
// setContentView(R.layout.activity_main); private static final String INJECTION_TOKEN = "**injection**"; //实例化WebView对象 webview = new WebView(this); //设置WebView属性,能够执行JavaScript脚本 // webview.getSettings().setJavaScriptEnabled(true); WebSettings mWebSetting; mWebSetting = webview.getSettings(); mWebSetting.setJavaScriptEnabled(true);//支持javascript //======================保证页面的完整显示在手机屏幕上======================= mWebSetting.setUseWideViewPort(true);// 设置可以支持缩放 mWebSetting.setLoadWithOverviewMode(true); mWebSetting.setSupportZoom(true); mWebSetting.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);//自适应屏幕 mWebSetting.setJavaScriptEnabled(true); try { //设置打开的页面地址 webview.loadUrl("http://88.888.cn/");//打开网址的首页 } catch(Exception ex) { ex.printStackTrace(); } setContentView(webview); webview.setWebViewClient(new WebViewClient(){ /*@Override public boolean shouldOverrideUrlLoading(WebView view, String url) { //返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器 view.loadUrl(url); return true; }*/ @Override public WebResourceResponse shouldInterceptRequest(WebView view, String url) { WebResourceResponse response = super.shouldInterceptRequest(view, url); if(url != null && url.contains(INJECTION_TOKEN)) { String assetPath = url.substring(url.indexOf(INJECTION_TOKEN) + INJECTION_TOKEN.length(), url.length()); try { response = new WebResourceResponse( "application/javascript", "UTF8",getAssets().open(assetPath) ); } catch (IOException e) { e.printStackTrace(); // Failed to load asset file } } return response; } }); } 第三步:设置androidmanifest.xml 加入上网权限<uses-permission android:name="android.permission.INTERNET"/>
最后,运行就可以了哈
设置WebView支持js的Alert,Confirm,Prompt函数的弹出提示框.
- //设置响应js 的Alert()函数
- webView.setWebChromeClient(new WebChromeClient() {
- @Override
- public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
- AlertDialog.Builder b = new AlertDialog.Builder(TestAlertActivity.this); b.setTitle("Alert");
//若不用标题,直接注释上面一句程序即可//b.setTitle("Alert")
//b.setTitle("Alert")
- b.setMessage(message);
- b.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- result.confirm();
- }
- });
- b.setCancelable(false);
- b.create().show();
- return true;
- }
- //设置响应js 的Confirm()函数
- @Override
- public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) {
- AlertDialog.Builder b = new AlertDialog.Builder(TestAlertActivity.this);
- b.setTitle("Confirm");
- b.setMessage(message);
- b.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- result.confirm();
- }
- });
- b.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- result.cancel();
- }
- });
- b.create().show();
- return true;
- }
- //设置响应js 的Prompt()函数
- @Override
- public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, final JsPromptResult result) {
- final View v = View.inflate(TestAlertActivity.this, R.layout.prompt_dialog, null);
- ((TextView) v.findViewById(R.id.prompt_message_text)).setText(message);
- ((EditText) v.findViewById(R.id.prompt_input_field)).setText(defaultValue);
- AlertDialog.Builder b = new AlertDialog.Builder(TestAlertActivity.this);
- b.setTitle("Prompt");
- b.setView(v);
- b.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- String value = ((EditText) v.findViewById(R.id.prompt_input_field)).getText().toString();
- result.confirm(value);
- }
- });
- b.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- result.cancel();
- }
- });
- b.create().show();
- return true;
- }
- });