1.当只用WebView的时候,最先注意的当然是在配置文件中添加访问因特网的权限;
mWebView.setWebViewClient(new WebViewClient() {
/*** Show in webview not system webview.*/public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return super.shouldOverrideUrlLoading(view, url);}}这样就保证了每次打开的页面都是在WebView实例中显示运行的;
4.在显示WebView时,点击手机Back时,会完全退出当前Activity,如果想退到历史浏览页面:重写back监听:
Java代码public boolean onKeyDown(int keyCode, KeyEvent event) {
WebView mWebView = (WebView) findViewById(R.id.browser); if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) { mWebView.goBack(); return true; } return super.onKeyDown(keyCode, event);}5.Android SDK提供了一个schema前缀为"file:///android_asset/".WebView遇到这样的schema,就去当前包中的 assets目录中找内容.如:"file:///android_asset/demo.html"
下面一段代码是对网页中JS的类似Alert()类的函数进行相应的重写响应: Java代码webView.setWebChromeClient(new WebChromeClient() {
public boolean onJsAlert(WebView view, String url, String message, final JsResult result) { AlertDialog.Builder b = new AlertDialog.Builder(BrowserJs.this); b.setTitle("Alert"); b.setMessage(message); b.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() { public void onClick(DialogInterface dialog, int which) { result.confirm(); } }); b.setCancelable(false); b.create(); b.show(); return true; };@Override
public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) { AlertDialog.Builder b = new AlertDialog.Builder(BrowserJs.this); b.setTitle("Confirm"); b.setMessage(message); b.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() { public void onClick(DialogInterface dialog, int which) { result.confirm(); } }); b.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { result.cancel(); } }); b.setCancelable(false); b.create(); b.show(); return true; };@Override
public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, final JsPromptResult result) { final LayoutInflater factory = LayoutInflater .from(BrowserJs.this); final View v = factory.inflate( R.layout.prompt_dialog, null); ((TextView) v.findViewById(R.id.prompt_message_text)) .setText(message); ((EditText) v.findViewById(R.id.prompt_input_field)) .setText(defaultValue);AlertDialog.Builder b = new AlertDialog.Builder(BrowserJs.this);
b.setTitle("Prompt"); b.setView(v); b.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() { public void onClick(DialogInterface dialog, int which) { String value = ((EditText) v .findViewById(R.id.prompt_input_field)) .getText().toString(); result.confirm(value); } }); b.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { result.cancel(); } }); b.setOnCancelListener(new DialogInterface.OnCancelListener() { public void onCancel(DialogInterface dialog) { result.cancel(); } }); b.show(); return true; };public void onProgressChanged(WebView view, int newProgress) {
BrowserJs.this.getWindow().setFeatureInt( Window.FEATURE_PROGRESS, newProgress * 100); super.onProgressChanged(view, newProgress); }public void onReceivedTitle(WebView view, String title) {
BrowserJs.this.setTitle(title); super.onReceivedTitle(view, title); } });go.setOnClickListener(new OnClickListener() {
public void onClick(View view) { String url = text.getText().toString(); webView.loadUrl(url); } }); webView.loadUrl("file:///android_asset/index.html");在上述代码中,用到的prompt_dialog.xml:
Java代码<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:gravity="center_horizontal" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/prompt_message_text" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <EditText android:id="@+id/prompt_input_field" android:layout_width="fill_parent" android:layout_height="wrap_content" android:selectAllOnFocus="true" android:scrollHorizontally="true" android:minWidth="250dp" /></LinearLayout>还有assets中的Html文件:
Java代码<html>
<script type="text/javascript"> function onAlert(){ alert("This is a alert sample from html"); } function onConfirm(){ var b=confirm("are you sure to login?"); alert("your choice is "+b); } function onPrompt(){ var b=prompt("please input your password","aaa"); alert("your input is "+b); }</script><pre><input type="button" value="alert" οnclick="onAlert()"/><input type="button" value="confirm" οnclick="onConfirm()"/><input type="button" value="prompt" οnclick="onPrompt()"/><a href="http://www.google.com"/>Google</a>
</pre></html>