- 继承
java.lang.Object
↳ android.view.View
↳ android.view.ViewGroup
↳ android.widget.AbsoluteLayout
↳ android.webkit.WebView - WebView
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("http://www.baidu.com");
- WebSettings
WebSettings webSettings = webView.getSettings();
webSettings.setAllowContentAccess(true);
webSettings.setAllowFileAccess(true);
webSettings.setAllowFileAccessFromFileURLs(true);
webSettings.setAllowUniversalAccessFromFileURLs(true);
webSettings.setAppCacheEnabled(true);
webSettings.setAppCachePath(getCacheDir().getAbsolutePath());
webSettings.setAppCacheMaxSize(Integer.MAX_VALUE);
webSettings.setBlockNetworkImage(true);
webSettings.setBlockNetworkLoads(true);
webSettings.setBuiltInZoomControls(true);
webSettings.setCacheMode(WebSettings.LOAD_NORMAL);
webSettings.setDatabaseEnabled(true);
webSettings.setDomStorageEnabled(true);
webSettings.setDisplayZoomControls(true);
webSettings.setDefaultFixedFontSize(16);
webSettings.setDefaultFontSize(16);
webSettings.setDefaultTextEncodingName("UTF-8");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
webSettings.setDisabledActionModeMenuItems(webSettings.MENU_ITEM_NONE);
}
webSettings.setDatabasePath(getDir("database", Context.MODE_PRIVATE).getPath());
webSettings.setDefaultZoom(WebSettings.ZoomDensity.MEDIUM);
webSettings.setEnableSmoothTransition(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
webSettings.setForceDark(webSettings.FORCE_DARK_AUTO);
}
webSettings.setFantasyFontFamily("fantasy");
webSettings.setFixedFontFamily("monospace");
webSettings.setGeolocationEnabled(true);
webSettings.setGeolocationDatabasePath(getFilesDir().getAbsolutePath());
webSettings.setJavaScriptEnabled(true);
webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
webSettings.setLoadWithOverviewMode(false);
webSettings.setLoadsImagesAutomatically(true);
webSettings.setLightTouchEnabled(true);
webSettings.setMediaPlaybackRequiresUserGesture(true);
webSettings.setMinimumFontSize(8);
webSettings.setMinimumLogicalFontSize(8);
webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_NEVER_ALLOW);
webSettings.setNeedInitialFocus(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
webSettings.setOffscreenPreRaster(false);
}
webSettings.setPluginState(WebSettings.PluginState.OFF);
webSettings.setRenderPriority(WebSettings.RenderPriority.NORMAL);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
webSettings.setSafeBrowsingEnabled(true);
}
webSettings.setSansSerifFontFamily("sans-serif");
webSettings.setSerifFontFamily("sans-serif");
webSettings.setStandardFontFamily("sans-serif");
webSettings.setSupportMultipleWindows(true);
webSettings.setSupportZoom(true);
webSettings.setSaveFormData(true);
webSettings.setSavePassword(true);
webSettings.setTextZoom(100);
webSettings.setTextSize(WebSettings.TextSize.NORMAL);
webSettings.setUserAgentString("");
webSettings.setUseWideViewPort(true);
- webView 事件
webView.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}
});
webView.setWebChromeClient(new WebChromeClient() {
public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("Alert");
builder.setMessage(message);
builder.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
result.confirm();
}
});
builder.setNegativeButton(android.R.string.cancel, new AlertDialog.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
result.cancel();
}
});
builder.setCancelable(false);
builder.create();
builder.show();
return true;
}
public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("confirm");
builder.setMessage(message);
builder.setPositiveButton(android.R.string.ok,
new AlertDialog.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
result.confirm();
}
});
builder.setNegativeButton(android.R.string.cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
result.cancel();
}
});
builder.setCancelable(false);
builder.create();
builder.show();
return true;
}
@Override
public void onProgressChanged(WebView view, int newProgress) {
MainActivity.this.getWindow().setFeatureInt(Window.FEATURE_PROGRESS, newProgress * 100);
super.onProgressChanged(view, newProgress);
}
public void onReceivedTitle(WebView view, String title) {
MainActivity.this.setTitle(title);
super.onReceivedTitle(view, title);
}
public void onExceededDatabaseQuota(String url,
String databaseIdentifier, long currentQuota,
long estimatedSize, long totalUsedQuota,
WebStorage.QuotaUpdater quotaUpdater) {
quotaUpdater.updateQuota(estimatedSize * 2);
}
public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
callback.invoke(origin, true, false);
super.onGeolocationPermissionsShowPrompt(origin, callback);
}
public void onReachedMaxAppCacheSize(long spaceNeeded, long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater) {
quotaUpdater.updateQuota(spaceNeeded * 2);
}
});
webView.setOnKeyListener(new View.OnKeyListener() {
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;
}
});