WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setGeolocationEnabled(true);//定位
settings.setGeolocationDatabasePath(getFilesDir().getPath());
settings.setBlockNetworkImage(true);
//settings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);//自适应
settings.setDisplayZoomControls(true);
//设置默认缩放方式尺寸是far
settings.setDefaultZoom(WebSettings.ZoomDensity.FAR);
//设置出现缩放工具
settings.setBuiltInZoomControls(true);
settings.setUseWideViewPort(true);//显示用户插件
settings.setSupportZoom(true);
settings.setJavaScriptCanOpenWindowsAutomatically(false);
webView.addJavascriptInterface(new JsToWeb(), "test");
//webView.setInitialScale(25);//为25%,最小缩放等级
webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
webView.setWebViewClient(new MyWebClient());
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onGeolocationPermissionsHidePrompt() {
super.onGeolocationPermissionsHidePrompt();
// Log.i(LOGTAG, "onGeolocationPermissionsHidePrompt");
}
@Override
public void onGeolocationPermissionsShowPrompt(final String origin,
final Callback callback) {
super.onGeolocationPermissionsShowPrompt(origin, callback);
AlertDialog.Builder builder = new AlertDialog.Builder(
MainActivity.this);
builder.setMessage("Allow to access location information?");
OnClickListener dialogButtonOnClickListener = new OnClickListener() {
public void onClick(DialogInterface dialog,
int clickedButton) {
if (DialogInterface.BUTTON_POSITIVE == clickedButton) {
callback.invoke(origin, true, true);
} else if (DialogInterface.BUTTON_NEGATIVE == clickedButton) {
callback.invoke(origin, false, false);
}
}
};
builder.setPositiveButton("Allow", dialogButtonOnClickListener);
builder.setNegativeButton("Deny", dialogButtonOnClickListener);
builder.show();
super.onGeolocationPermissionsShowPrompt(origin, callback);
// Log.i(LOGTAG, "onGeolocationPermissionsShowPrompt");
}
@Override
public boolean onJsAlert(WebView view, String url, String message,
final JsResult result) {//处理页面上有提示框的 js
// 构建一个Builder来显示网页中的alert对话框
Builder builder = new Builder(MainActivity.this);
builder.setTitle("提示对话框");
builder.setMessage(message);
builder.setPositiveButton(android.R.string.ok,
new AlertDialog.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
result.confirm();
}
});
builder.setCancelable(false);
builder.create();
builder.show();
return true;
}
});
webView.setOnKeyListener(new OnKeyListener() {//监听webview返回
@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(); // 后退
// webview.goForward();//前进
return true; // 已处理
}
}
return false;
}
});
//Js交互方法
private class JsToWeb{
@JavascriptInterface//4.2以上需要增加@JavascriptInterface 接口注册
public void txt(final String id){
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), id, Toast.LENGTH_SHORT).show();
}
});
}
}
public class MyWebClient extends WebViewClient {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
// view.resumeTimers();
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
super.onReceivedError(null, 1, "访问失败", null);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
view.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
view.getSettings().setBlockNetworkImage(false);
view.resumeTimers();//js导致的,尝试在onpause里加入mWebView.pauseTimers(), onResume()里加入mWebView.resumeTimers()。
}
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler,
SslError error) {
super.onReceivedSslError(view, handler, error);
// handler.proceed();
}
}