您的位置:首页 > 移动开发

使用WebView简单嵌套页面

2017-08-18 11:53 323 查看
webview是一个特殊的view,用于在此view上展示一个页面。该页面的js可以与android端的java代码中的方法互调,还能实现网页前进后退,网页放大,缩小,搜索等功能。

1、webview的使用

首先在layout下创建xml文件,添加webview控件

<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent">
</WebView>


在java代码中声明webview,url为你要访问的网址

private WebView webView;

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

webView.loadUrl(url);
//覆盖WebView默认使用第三方或系统默认浏览器打开网页的行为,使网页用WebView打开
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器
view.loadUrl(url);
return true;
}
});


创建WebSettings对象,监听加载过程

WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setAllowContentAccess(true);
webSettings.setAppCacheEnabled(false);
webSettings.setBuiltInZoomControls(false);
webSettings.setUseWideViewPort(true);
webSettings.setLoadWithOverviewMode(true);
webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);

webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
// TODO Auto-generated method stub
if (newProgress == 100) {
Log.e("aaa", "加载完成");
} else {
Log.e("aaa", "加载中");
}
}
});


2、复写物理返回键

//改写物理按键——返回的逻辑
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (webView.canGoBack()) {
webView.goBack();//返回上一页面
return true;
} else {
System.exit(0);//退出程序
}
}
return super.onKeyDown(keyCode, event);
}


3、添加网络访问权限

<!--用于访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET"/>
<!--用于获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>


4、一般需要配合使用menu菜单

创建res/menu/main.xml

menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context="www.csy.com.newapp.activity.MainActivity" >

<item
android:id="@+id/change"
android:orderInCategory="100"
android:showAsAction="always"
android:title="切换账号"/>

</menu>


在java代码中声明逻辑

//重写onCreateOptionMenu(Menu menu)方法,当菜单第一次被加载时调用
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//填充选项菜单(读取XML文件、解析、加载到Menu组件上)
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

//重写OptionsItemSelected(MenuItem item)来响应菜单项(MenuItem)的点击事件(根据id来区分是哪个item)
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.change:
//此处写单击菜单按钮中的逻辑
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}


5、WebSettings详解

http://blog.csdn.net/kevinscsdn/article/details/52241334此篇博客介绍的比较详细,一般错误都出在WebSettings设置的不全。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: