快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

新葡新京论坛:android用户界面组件Widget网络视图WebView



一个WebView的简单例子 。

在开拓历程中应该留意几点:

1.AndroidManifest.xml中必须应用许可"android.permission.INTERNET",否则会出Web page not available差错。

2.假如造访的页面中有Javascript,则webview必须设置支持Javascript。

webview.getSettings().setJavaScriptEnabled(true);

3.假如页面中链接,假如盼望点击链接继承在当前browser中相应,而不是新开Android的系统browser中相应该链接,必须覆盖 webview的WebViewClient工具。

mWebView.setWebViewClient(new WebViewClient(){

public boolean shouldOverrideUrlLoading(WebView view, String url) {

view.loadUrl(url);

return true;

}

});

mWebView.setWebViewClient(new WebViewClient(){

public boolean shouldOverrideUrlLoading(WebView view, String url) {

view.loadUrl(url);

return true;

}

});

4.假如不做任何处置惩罚,浏览网页,点击系统“Back”键,全部Browser会调用finish()而停止自身,假如盼望浏览的网 页回退而不是推出浏览器,必要在当前Ac新葡新京论坛tivity中处置惩罚并破费掉落该Back事故。

public boolean onKeyDown(int keyCode, KeyEvent event) {

if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {

mWebView.goBack();

return true;

}

return super.onKeyDown(keyCode, event);

}

public boolean onKeyDown(int keyCode, KeyEvent event) {

if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {

mWebView.goBack();

return true;

}

return super.onKeyDown(keyCode, event);

}

下一步让我们来懂得一下android中webview是若何支持javascripte自定义工具的,在w3c标准中js有 window,history,document等标准工具,同样我们可以在开拓浏览器时自己定义我们的工具调用手机系统功能来处置惩罚,这样应用js就可以 随心所欲了。

看一个实例:

view plaincopy to clipboardprint?

public class WebViewDemo extends Activity {

private WebView mWebView;

private Handler mHandler = new Handler();

public void onCreate(Bundle icicle) {

super.onCreate(icicle);

setContentView(R.layout.webviewdemo);

mWebView = (WebView) findViewById(R.id.webview);

WebSettings webSettings = mWebView.getSettings();

webSettings.setJavaScriptEnabled(true);

mWebView.addJavascriptInterface(new Object() {

public void clickOnAndroid() {

mHandler.post(new Runnable() {

public void run() {

mWebView.loadUrl("javascript:wave()");

}

});

}

}, "demo");

mWebView.loadUrl("file:///android_asset/demo.html");

}

}

public class WebViewDemo extends Activity {

private WebView mWebView;

private Handler mHandler = new Handler();

public void onCreate(Bundle icicle) {

super.onCreate(icicle);

setContentView(R.layout.webviewdemo);

mWebView = (WebView) findViewById(R.id.webview);

WebSettings webSettings = mWebView.getSettings();

webSettings.setJavaScriptEnabled(true);

mWebView.addJavascriptInterface(new Object() {

public void clickOnAndroid() {

mHandler.post(new Runnable() {

public void run() {

mWebView.loadUrl("javascript:wave()");

}

});

}

}, "demo");

mWebView.loadUrl("file:///android_asset/demo.html");

}

}

我们看addJavascriptInterface(Object obj,String interfaceName)这个措施,该措施将一个java工具绑定到一个javascript工具中,javascript工签字便是 interfaceName(demo),感化域是Global。这样初始化webview后,在webview加载的页面中就可以直接经由过程 javascript:window.demo造访到绑定的java工具了。来看看在html中是如何调用的。

Click me!

Click me!

这样在javascript中就可以调用java工具的clickOnAndroid()措施了,同样我们可以在此工具中定义很多措施(比 如发短信,调用联系人列表等手机系统功能。),这里wave()措施是java中调用javascript的例子。

这里还有几个常识点:

1)为了让WebView从apk文件中加载assets,Android SDK供给了一个schema,前缀为"file:/新葡新京论坛//android_asset/"。WebView碰到这样的schema,就去当前包中的 assets目录中找内容。如上面的"file:///android_asset/demo.html"

2)addJavascriptInterface措施中要绑定的Java工具及措施要运行别的的线程中,不能运行在构造他的线程中,这也是应用 Handler的目的。

总结:

1、添加权限:AndroidManifest.xml中必须应用许可"android.pe新葡新京论坛rmission.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、设置WevView要显示的网页:

互联网用:webView.loadUrl("http://www.google.com");

本地文件用:webView.loadUrl("file:///android_asset/XX.html");本地文件寄放在:assets文件中

5、假如盼望点击链接由自己处置惩罚,而不是新开Android的系统browser中相应该链接。

给WebView添加一个事故监听工具(WebViewClient)

并重写此中的一些措施

shouldOverrideUrlLoading:对网页中超链接按钮的相应。

当按下某个连接时WebViewClient会调用这个措施,并通报参数:按下的url

onLoadResource

onPageStart

onPageFinis新葡新京论坛h

onReceiveError

onReceivedHttpAuthRequest

6、假如用webview点链接看了很多页今后,假如不做任何处置惩罚,点击系统“Back”键,全部浏览器会调用finish()而停止自身,假如盼望浏览的网页回退而不是退出浏览器,必要在当前Activity中处置惩罚并破费掉落该Back事故。

覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)措施。

public boolean onKeyDown(int keyCoder,KeyEvent event){

if(webView.canGoBack() && keyCoder == KeyEvent.KEYCODE_BACK){

webview.goBack();//goBack()表示返回webView的上一页面

return true;

}

ret新葡新京论坛urn false;

}

您可能还会对下面的文章感兴趣: