Android项目中WebView的简单用法

最近在做项目,使用到了WebView加载JavaScript界面,遇到了一些不大不小的问题,在这里做一些总结,为以后的开发奠定一下基础。

本文分七个部分

1.设置WebView与JavaScript可交互
2.实现对网页中超链接按钮的响应
3.获取网页的页面标题
4.给WebView加载网页添加进度条
5.获取定位信息并传递给JavaScript
6.设置定位缓存路径
7.WebView的刷新,后退,加载界面以及单击返回按钮返回到上一个界面

1.设置WebView与JavaScript可交互(此处非常简单只需要一句代码即可)

webView.getSettings().setJavaScriptEnabled(true);

2.实现对网页中超链接按钮的响应(需要给WebView设置setWebViewClient,并重写其中的shouldOverrideUrlLoading方法)

//对网页中超链接按钮的响应
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
     view.loadUrl(url);
     return true;
}

3.获取网页的页面标题(需要给WebView设置setWebViewClient,并重写其中的onPageFinished方法)

 //获取页面标题
 @Override
 public void onPageFinished(WebView view, String url) {
     super.onPageFinished(view, url);
     title.setText(view.getTitle());
 }

4.给WebView加载网页添加进度条(需要给WebView设置setWebChromeClient,并重写其中的onProgressChanged方法,并将ProgressBar控件与其进行绑定)

//给WebView添加进度条
@Override
public void onProgressChanged(WebView view, int newProgress) {
    super.onProgressChanged(view, newProgress);
    if (newProgress==100){
        progressBar.setVisibility(View.GONE);
    }else{
        progressBar.setVisibility(View.VISIBLE);
        progressBar.setProgress(newProgress);
        }
 }

5.获取定位信息并传递给JavaScript(需要给WebView设置setWebChromeClient,并重写其中的onGeolocationPermissionsShowPrompt方法)

//onGeolocationPermissionsShowPrompt 该方法被WebView回调,以获取定位信息并传给JavaScript
@Override
public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
     callback.invoke(origin,true,false);
}

6.设置定位缓存路径

//Geolocation需要用数据库来缓存定位信息和相关权限设置信息,所以设置定位信息缓存路径
//如果不设置缓存路径的话,缓存的存储将不会被自动分配
webView.getSettings().setGeolocationDatabasePath(this.getFilesDir().getPath());

7.WebView的刷新,后退,加载界面以及单击返回按钮返回到上一个界面

//WebView的刷新
webView.reload();
//WebView的后退
webView.goBack();
//WebView的加载界面
webView.loadUrl(result);

//单击返回按钮WebView回到上一个界面
webView.setOnKeyListener(new View.OnKeyListener() {
   @Override
   public boolean onKey(View v, int keyCode, KeyEvent event) {
      if (event.getAction()==KeyEvent.ACTION_DOWN){
         if (keyCode==KeyEvent.KEYCODE_BACK&&webView.canGoBack()){
                webView.goBack();
                return true;
          }
       }
         return false;
      }
});

关于WebView使用的完整代码:

public class WebViewActivity extends AppCompatActivity {

    private WebView webView;
    private TextView title;
    private ProgressBar progressBar;
    private  String result;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_scan_result);
        //初始化控件
        initView();
        result = getIntent().getStringExtra("result");//获取传递过来的网络接口
        //webView的相关配置
        settingWebView(result);
    }

    //初始化控件
    private void initView() {

        title = (TextView) findViewById(R.id.activity_scan_result_title);
        webView = (WebView) findViewById(R.id.activity_scan_result_web_view);
        progressBar = (ProgressBar) findViewById(R.id.activity_scan_result_progressbar);
    }

    //webView的相关配置
    private void settingWebView(String result) {
        //Web与JavaScript可交互
        webView.getSettings().setJavaScriptEnabled(true);

        webView.setWebViewClient(new WebViewClient(){
            //对网页中超链接按钮的响应
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }

            //获取页面标题
            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                title.setText(view.getTitle());
            }
        });


        webView.setWebChromeClient(new WebChromeClient(){
            //给WebView添加进度条
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                super.onProgressChanged(view, newProgress);
                if (newProgress==100){
                    progressBar.setVisibility(View.GONE);
                }else{
                    progressBar.setVisibility(View.VISIBLE);
                    progressBar.setProgress(newProgress);
                }
            }

            //onGeolocationPermissionsShowPrompt 该方法被WebView回调,以获取定位信息并传给JavaScript
            @Override
            public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
                callback.invoke(origin,true,false);
            }
        });
        //Geolocation需要用数据库来缓存定位信息和相关权限设置信息,所以设置定位信息缓存路径.如果不设置缓存路径的话,缓存的存储将不会被自动分配
        webView.getSettings().setGeolocationDatabasePath(this.getFilesDir().getPath());
        webView.loadUrl(result);

        //单击返回按钮WebView回到上一个界面
        webView.setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                if (event.getAction()==KeyEvent.ACTION_DOWN){
                    if (keyCode==KeyEvent.KEYCODE_BACK&&webView.canGoBack()){
                        webView.goBack();
                        return true;
                    }
                }
                return false;
            }
        });
    }



    public void BackClick(View view) {
        Intent intent = new Intent(ScanResultActivity.this,ScanActivity.class);
        startActivity(intent);
        finish();
    }

    public void ButtonClick(View view) {
        switch (view.getId()){
            case R.id.button1:
                webView.reload();//WebView 的刷新
                break;
            case R.id.button2:
                webView.goBack();//WebView 的后退
                break;
        }
    }
}

暂时就写到这里了,后期如果深入学习会继续分享,希望看到本文的人都能得到帮助

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值