工作中用到了 webview 下面把 webview 相关的知识进行一
下
总结
初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf
:
首先要在 manifest.main 文件中创建一个 webview,然后再 activity 中定义这个 webview 然后
进行一下相关操作。
1、添加权限:AndroidManifest.xml 中必须使用许可"android.permission.INTERNET",否则会出
Web page not available 错误。
2、在要 Activity 中生成一个 WebView 组件:WebView webView = new WebView(this);
3、设置 WebView 基本信息:
如果访问的页面中有 Javascript,则 webview 必须设置支持 Javascript。
webview.getSettings().setJavaScriptEnabled(true);
触摸焦点起作用
requestFocus();
取消滚动条
this.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY);
4 如果希望点击链接由自己处理,而不是新开 Android 的系统 browser 中响应该链接。给
WebView 添 加 一 个 事 件 监 听 对 象 ( WebViewClient) 并 重 写 其 中 的 一 些 方 法
shouldOverrideUrlLoading:对网页中超链接按钮的响应。 当按下某个连接时 WebViewClient
会调用这个方法,并传递参数:按下的 url
onLoadResource
onPageStart
onPageFinish
onReceiveError
onReceivedHttpAuthRequest
5、如果访问的页面中有 Javascript,则 webview 必须设置支持 Javascript ,否则显示空白页面。
Java 代码
webview.getSettings().setJavaScriptEnabled(true);
6、如果页面中链接,如果希望点击链接继续在当前 browser 中响应,而不是新开 Android 的系统 browser
中响应该链接,必须覆盖 webview 的 WebViewClient 对象:
Java 代码
1. mWebView.setWebViewClient(new WebViewClient(){
2. public boolean shouldOverrideUrlLoading(WebView view, String url) {
3. view.loadUrl(url);
4. return true;
5. }
6. });
上述方法告诉系统由我这个 WebViewClient 处理这个 Intent,我来加载 URL。点击一个链接的 Intent 是向上
冒泡的,shouldOverrideUrlLoading 方法 return true 表示我加载后这个 Intent 就消费了,不再向上冒泡了。
7、如果不做任何处理,在显示你的 Brower UI 时,点击系统“Back”键,整个 Browser 会作为一个整体“Back"
到其他 Activity 中,而不是希望的在 Browser 的历史页面中 Back。如果希望实现在历史页面中 Back,需
要在当前 Activity 中处理并消费掉该 Back 事件:
Java 代码
1. public boolean onKeyDown(int keyCode, KeyEvent event) {
2. if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
3. mWebView.goBack();
4. return true;
5. }
6. return super.onKeyDown(keyCode, event);
7. }
对于 Android 2.0 开始又多出了一种新的方法,对于 Activity 可以单独获取 Back 键的按下事件,直接重
写 onBackPressed 方法即可,代码如下
Java 代码
@Override
1、public void onBackPressed() {
2、 // 这里处理逻辑代码,该方法仅适用于 2.0 或更高版本的 sdk
3、 return ;
4、}
这里还有几个
知识点
高中化学知识点免费下载体育概论知识点下载名人传知识点免费下载线性代数知识点汇总下载高中化学知识点免费下载
:
1)为了让 WebView 从 apk 文件中加载 assets,Android SDK 提供了一个 schema,前缀为
"file:///android_asset/"。WebView 遇到这样的 schema,就去当前包中的 assets 目录中找内
容。如上面的"file:///android_asset/demo.html"
2)addJavascriptInterface 方法中要绑定的 Java 对象及方法要运行另外的线程中,不能运行在
构造他的线程中,这也是使用 Handler 的目的。
Webview 的两种显示网页的方法:
(1):webview.loadUrl(“www.baidu.com”);
public class WebviewTest extends Activity {
/** Called when the activity is first created. */
private WebView mWebView;
private Button bt1;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mWebView = (WebView)findViewById(R.id.webview);
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
bt1 = (Button)findViewById(R.id.Button01);
bt1.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
// TODO Auto-generated method stub
webview.loadUrl(“www.baidu.com”);
}
});
}
}
(2):自定义网页:Webview.data();
public class WebviewTest extends Activity {
/** Called when the activity is first created. */
private WebView mWebView;
private Button bt1;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mWebView = (WebView)findViewById(R.id.webview);
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
bt1 = (Button)findViewById(R.id.Button01);
bt1.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
// TODO Auto-generated method stub
String str = "asdas";
mWebView.loadData(
""+str+"",
"text/html", "utf-8");
}
});
}
}
Webview 的常用方法实例:
Manifest.xml 中的代码:
加入权限:
布局文件中的代码:
TestWebviewDemo 中的代码:
public class TestWebviewDemo extends Activity {
/** Called when the activity is first created. */
private static final String TAG = "TestWebviewDemo";
private WebView mWebView;
private Handler mHandler = new Handler();
private int mDensity;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mWebView = (WebView) findViewById(R.id.WebView01);
mWebView.getSettings().setAllowFileAccess(true);// 设置允许访问文件数据
mWebView.getSettings().setBuiltInZoomControls(true);// 设置支持缩放
mWebView.getSettings().setSavePassword(false); // 设置是否保存密码
// 设置支持 JavaScript 脚本
mWebView.getSettings().setJavaScriptEnabled(true);
// 设置支持各种不同的设备
mWebView
.getSettings()
.setUserAgentString(
"Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us)
AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10");
// 通过这个设置来执行加载 webview 网页时所要执行的一些方法
mWebView.setWebViewClient(new WebViewClient() {
// 新开页面时用自己定义的 webview 来显示,不用系统自带的浏览器来显示
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// TODO Auto-generated method stub
// 当有新连接时使用当前的 webview 进行显示
view.loadUrl(url);
return super.shouldOverrideUrlLoading(view, url);
}
// 开始加载网页时要做的工作
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}
//加载完成时要做的工作
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}
// 加载错误时要做的工作
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
Log.d(TAG, "error=" + description);
Toast.makeText(TestWebviewDemo.this,
errorCode + "/" + description, Toast.LENGTH_LONG)
.show();
}
});
// 处理网页中的一些对话框信息(提示对话框,带选择的对话框,带输入的对话
框)
mWebView.setWebChromeClient(new WebChromeClient() {
// 对话框
public boolean onJsAlert(WebView view, String url, String message,
final JsResult result) {
// 构建一个 Builder 来显示网页中的 alert 对话框
Builder builder = new Builder(TestWebviewDemo.this);
builder.setTitle("提示对话框");
builder.setMessage(message);
builder.setPositiveButton(android.R.string.ok,
new AlertDialog.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
// TODO Auto-generated method stub
result.confirm();
}
});
builder.setCancelable(false);
builder.create();
builder.show();
return true;
}
// 带按钮的对话框
public boolean onJsConfirm(WebView view, String url,
String message, final JsResult result) {
Builder builder = new Builder(TestWebviewDemo.this);
builder.setTitle("带选择的对话框");
builder.setMessage(message);
builder.setPositiveButton(android.R.string.ok,
new AlertDialog.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
// TODO Auto-generated method stub
result.confirm();
}
});
builder.setNeutralButton(android.R.string.cancel,
new AlertDialog.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
// TODO Auto-generated method stub
result.cancel();
}
});
builder.setCancelable(false);
builder.create();
builder.show();
return true;
}
// 带输入框的对话框
public boolean onJsPrompt(WebView view, String url, String message,
String defaultValue, final JsPromptResult result) {
LayoutInflater inflater = LayoutInflater
.from(TestWebviewDemo.this);
final View v = inflater.inflate(R.layout.prom_dialog, null);
// 设置 TextView 对应网页中的提示信息
((TextView) v.findViewById(R.id.TextView_PROM))
.setText(message);
// 设置 EditText 对应网页中的输入框
((EditText) v.findViewById(R.id.EditText_PROM))
.setText(defaultValue);
Builder builder = new Builder(TestWebviewDemo.this);
builder.setTitle("带输入的对话框");
builder.setView(v);
builder.setPositiveButton(android.R.string.ok,
new AlertDialog.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
// TODO Auto-generated method stub
String value = ((EditText) v
.findViewById(R.id.EditText_PROM))
.getText().toString();
result.confirm(value);
}
});
builder.setNegativeButton(android.R.string.cancel,
new AlertDialog.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
// TODO Auto-generated method stub
result.cancel();
}
});
builder
.setOnCancelListener(new DialogInterface.OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
// TODO Auto-generated method stub
result.cancel();
}
});
builder.create();
builder.show();
return true;
}
// 设置网页加载的进度条
public void onProgressChanged(WebView view, int newProgress) {
TestWebviewDemo.this.getWindow().setFeatureInt(
Window.FEATURE_PROGRESS, newProgress * 100);
super.onProgressChanged(view, newProgress);
}
// 设置应用程序的标
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
public void onReceivedTitle(WebView view, String title) {
TestWebviewDemo.this.setTitle(title);
super.onReceivedTitle(view, title);
}
});
// 与网页进行交互的 addJavascriptInterface()的方法
mWebView.addJavascriptInterface(new Object() {
public void clickOnAndroid(final String str) {
mHandler.post(new Runnable() {
@Override
public void run() {
// 逻辑代码
});
}
}, "demo");
if (mDensity == 240) { // 可以让不同的 density 的情况下,可以让页面进行适配
mWebView.getSettings().setDefaultZoom(ZoomDensity.FAR);
} else if (mDensity == 160) {
mWebView.getSettings().setDefaultZoom(ZoomDensity.MEDIUM);
} else {
mWebView.getSettings().setDefaultZoom(ZoomDensity.CLOSE);
}
String strUrl = "http://10.0.2.2:8080/WebTest3";
mWebView.loadUrl(strUrl);
}
//处理返回的事件,(后退进入前一个界面而不是全部退出)
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && mWebView.canGoBack()) {
mWebView.goBack();// 返回前一个页面
return true;
}
return super.onKeyDown(keyCode, event);
}
Webview 中 java 与网页进行数据交互:
先看我们的 html 文档:
//js 调用 Java 方法
Click me!
Manifest.Xml 中:
加入权限:
再看我们的 java 代码。
Java 代码
public class WebViewDemo extends Activity {
private static final String LOG_TAG = "WebViewDemo";
private WebView mWebView;
private Handler mHandler = new Handler();
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
mWebView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = mWebView.getSettings();
webSettings.setSavePassword(false);
webSettings.setSaveFormData(false);
webSettings.setJavaScriptEnabled(true);
webSettings.setSupportZoom(false);
mWebView.setWebChromeClient(new MyWebChromeClient());
//自定义的 Demo,供 js 网页调用
mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo");
mWebView.loadUrl("file:///android_asset/demo.html");
}
final class DemoJavaScriptInterface {
DemoJavaScriptInterface() {
}
/**
* This is not called on the UI thread. Post a runnable to invoke
* loadUrl on the UI thread.
*/
public void clickOnAndroid() {
//用 handler 来更新 UI
mHandler.post(new Runnable() {
public void run() {
//Java 调用 js 方法
mWebView.loadUrl("javascript:wave()");
}
});
}
}
/**
* Provides a hook for calling "alert" from javascript. Useful for
* debugging your javascript.
*/
final class MyWebChromeClient extends WebChromeClient {
@Override
public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
Log.d(LOG_TAG, message);
result.confirm();
return true;
}
}
}
再看个例子:
Html 中的代码:
下面我们演示三种对话框
Manifest.Xml 中:
加入权限:
Java 中的代码:
public class Test extends Activity {
/** Called when the activity is first created. */
private EditText et = null;
private Button btn = null;
private WebView wv = null;
private WebSettings ws = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
et = (EditText) this.findViewById(R.id.EditText01);
btn = (Button) this.findViewById(R.id.Button01);
wv = (WebView) this.findViewById(R.id.WebView);
ws = wv.getSettings();
ws.setAllowFileAccess(true);//设置允许访问文件数据
ws.setJavaScriptEnabled(true);//设置支持 javascript 脚本
ws.setBuiltInZoomControls(true);//设置支持缩放
wv.requestFocus();
wv.setWebViewClient(new WebViewClient(){
public boolean shouldOverrideUrlLoading(WebView view,String url){
//当有新连接时,使用当前的 WebView
view.loadUrl(url);
return true;
}
});
wv.setWebChromeClient(new WebChromeClient(){
public boolean onJsAlert(WebView view,String url,String message,final JsResult
result){
//构建一个 Builder 来显示网页中的 alert 对话框
Builder builder = new Builder(Test.this);
builder.setTitle("提示对话框");
builder.setMessage(message);
builder.setPositiveButton(android.R.string.ok, new
AlertDialog.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
result.confirm();
}
});
builder.setCancelable(false);
builder.create();
builder.show();
return true;
}
public boolean onJsConfirm(WebView view,String url,String message,final
JsResult result){
Builder builder = new Builder(Test.this);
builder.setTitle("带选择的对话框");
builder.setMessage(message);
builder.setPositiveButton(android.R.string.ok, new
AlertDialog.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
result.confirm();
}
});
builder.setNeutralButton(android.R.string.cancel, new
AlertDialog.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
result.cancel();
}
});
builder.setCancelable(false);
builder.create();
builder.show();
return true;
}
public boolean onJsPrompt(WebView view,String url,String message,String
defaultValue,final JsPromptResult result){
LayoutInflater inflater = LayoutInflater.from(Test.this);
final View v = inflater.inflate(R.layout.prom_dialog, null);
//设置 TextView 对应网页中的提示信息
((TextView)v.findViewById(R.id.TextView_PROM)).setText(message);
//设置 EditText 对应网页中的输入框
((EditText)v.findViewById(R.id.EditText_PROM)).setText(defaultValue);
Builder builder = new Builder(Test.this);
builder.setTitle("带输入的对话框 ");
builder.setView(v);
builder.setPositiveButton(android.R.string.ok, new
AlertDialog.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
String value =
((EditText)v.findViewById(R.id.EditText_PROM)).getText().toString();
result.confirm(value);