文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android开发使用WebView打造webapp示例代码

2024-04-02 19:55

关注

前言

博主最近想做一款app,因为内容已经有了,故想到了使用WebView来做 ,现将代码贴出如下,供有同样需求的人参考,少走弯路

代码如下

public class MainActivity extends Activity{
    private WebView webview;
    private Handler handler;
    private ProgressDialog pd;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        initWebView();
    }
    
    public void initWebView() {
        //实例化WebView对象
        webview = new WebView(this);
        handler = new Handler() {
            public void handleMessage(Message msg) {//定义一个Handler,用于处理下载线程与UI间通讯
                if (!Thread.currentThread().isInterrupted()) {
                    switch (msg.what) {
                        case 0:
                            pd.show();//显示进度对话框
                            break;
                        case 1:
                            pd.hide();//隐藏进度对话框,不可使用dismiss()、cancel(),否则再次调用show()时,显示的对话框小圆圈不会动。
                            break;
                    }
                }
                super.handleMessage(msg);
            }
        };
        //设置WebViewClient
        webview.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;//如果不需要其他对点击链接事件的处理返回true,否则返回false
            }
            @Override
            public void onPageFinished(WebView view, String url) {
                if (!webview.getSettings().getLoadsImagesAutomatically()) {
                    webview.getSettings().setLoadsImagesAutomatically(true);
                }
            }
        });
        webview.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onProgressChanged(WebView view, int progress) {
                pd.setMessage("数据载入中("+progress+"%),请稍候!");
                if (progress == 100) {
                    handler.sendEmptyMessage(1);//如果全部载入,隐藏进度对话框
                }
                MainActivity.this.setProgress(progress);
            }
        });
        pd = new ProgressDialog(MainActivity.this);
        pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        handler.sendEmptyMessage(0);
        WebSettings webSettings = webview.getSettings();
        webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);//优先使用缓存的内容
        webSettings.setUseWideViewPort(true);//设定支持网页viewport
        webSettings.setJavaScriptEnabled(true);//设置WebView属性,能够执行Javascript脚本
//        webSettings.setSupportZoom(true);//支持缩放
//        webSettings.setBuiltInZoomControls(true);// 设置显示缩放按钮
//        setZoomControlGone(webview);
        webSettings.supportMultipleWindows();  //多窗口
        webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
        webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);//禁止左右滚动
        webview.requestFocusFromTouch();//支持获取手势焦点
        webview.setHorizontalScrollBarEnabled(false);//水平不显示滚动条
        webview.setVerticalScrollbarOverlay(true);
        getWindow().requestFeature(Window.FEATURE_PROGRESS);//设置窗口风格为进度条
        //告诉WebView先不要自动加载图片,等页面finish后再发起图片加载
        if (Build.VERSION.SDK_INT >= 19) {
            webview.getSettings().setLoadsImagesAutomatically(true);
        } else {
            webview.getSettings().setLoadsImagesAutomatically(false);
        }
        //加载需要显示的网页
        webview.loadUrl("http://www.kailing.pub/juanmei/");

        //设置Web视图
        setContentView(webview);
    }
    //实现放大缩小控件隐藏
    public void setZoomControlGone(View view) {
        Class classType;
        Field field;
        try {
            classType = WebView.class;
            field = classType.getDeclaredField("mZoomButtonsController");
            field.setAccessible(true);
            ZoomButtonsController mZoomButtonsController = new ZoomButtonsController(view);
            mZoomButtonsController.getZoomControls().setVisibility(View.GONE);
            try {
                field.set(view, mZoomButtonsController);
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        }
    }
    //设置回退
    //覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {
            webview.goBack();
            return true;
        } else if (keyCode == KeyEvent.KEYCODE_BACK) {
            ConfirmExit();//按了返回键,但已经不能返回,则执行退出确认
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

    
    public void ConfirmExit() {
        AlertDialog.Builder ad = new AlertDialog.Builder(MainActivity.this);
        ad.setTitle("退出");
        ad.setMessage("是否退出娟妹美甲坊?");
        ad.setPositiveButton("是", new DialogInterface.OnClickListener() {//退出按钮
            @Override
            public void onClick(DialogInterface dialog, int i) {
                // TODO Auto-generated method stub
                MainActivity.this.finish();//关闭activity
                System.exit(0);
            }
        });
        ad.setNegativeButton("否", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int i) {
                //不退出不用执行任何操作
            }
        });
        ad.show();//显示对话框
    }
    // 继承GestureListener,重写left和right方法,
    private class MyGestureListener extends GestureListener {
        public MyGestureListener(Context context) {
            super(context);
        }
        @Override
        public boolean left() {
            webview.goForward();
            return super.left();
        }
        @Override
        public boolean right() {
            webview.goBack();
            return super.right();
        }
    }
}

以上就是Android开发使用WebView打造web app的关键示例代码的详细内容,更多关于Android开发WebView打造web app的资料请关注编程网其它相关文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯