WebView基本使用
//初始化
webview= (WebView) findViewById(R.id.webView);
//或者代码生成
WebView webview =new WebView(this);
//垂直不显示滚动条
webview.setVerticalScrollBarEnabled(false);
//声明WebSettings子类
WebSettings webSettings = webview.getSettings();
//如果访问的页面中要与Javascript交互,则webview必须设置支持Javascript
webSettings.setJavaScriptEnabled(true);
//设置自适应屏幕,两者合用
webSettings.setUseWideViewPort(true); //将图片调整到适合webview的大小
webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小
//缩放操作
webSettings.setSupportZoom(true); //支持缩放,默认为true。是下面那个的前提。
webSettings.setBuiltInZoomControls(true); //设置内置的缩放控件。若为false,则该WebView不可缩放
webSettings.setDisplayZoomControls(false); //隐藏原生的缩放控件
//其他细节操作 缓存设置
webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
webSettings.setAllowFileAccess(true); //设置可以访问文件
webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
webSettings.setLoadsImagesAutomatically(true); //支持自动加载图片
//允许http和https混合
webSettings.setPluginState(WebSettings.PluginState.ON);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
setting.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
webSettings.setDefaultTextEncodingName("utf-8");//设置编码格式
//设置显示方式
webview.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//在本窗口显示网页,隐藏地址栏
view.loadUrl(url);
//以网页形式显示
// Uri uri = Uri.parse(url);
// Intent intent = new Intent(Intent.ACTION_VIEW, uri);
// startActivity(intent);
return false;
}
});
//弹窗形式的js交互
webview.setWebChromeClient(new WebChromeClient(){
@Override
public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {
//message指js返回的数据
// 表示成功调用了方法
result.confirm("js调用了Android的方法成功啦");
//返回true表示不弹窗
return true;
}
});
}
//点击返回返回上一层的网页,无上一层就关闭窗体
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {
webview.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
//避免内存溢出,关闭窗体时也要销毁webview
@Override
protected void onDestroy() {
if (webview != null) {
webview.loadDataWithBaseURL(null, "", "text/html", "utf-8", null);
webview.clearHistory();
((ViewGroup) webview.getParent()).removeView(webview);
webview.destroy();
webview = null;
}
super.onDestroy();
}
Js代码如下
这种交互方式比较麻烦,一搬很少用,而是采用addJavascriptInterface方式交互的。
创建js调用的Android方法
public class AndroidtoJs extends Object {
private Context context;
public AndroidtoJs(Context context) {
super();
this.context = context;
}
@JavascriptInterface
public String onGetPhone(){
Log.i("onGetPhone:","js调用Android方法");
return "00000";
}
}
提供js调用的接口
AndroidtoJs androidtoJs = new AndroidtoJs(this);
webView.addJavascriptInterface(androidtoJs, "android");
js调用方法
android.onGetPhone();