很多时候我们在开发程序的时候 为了方便 ,我们在做页面的时候 会采用webview直接加载页面的方式, 尤其是在大量的新闻展示页面的时候,那么 webview 到底该如何使用呢,下面我们就将从浅入深的 教大家 如何使用webview.
首先 先布置一下 布局文件
代码为:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.tdcq.webviewdemo.MainActivity"> <WebView android:id="@+id/webview" android:layout_width="wrap_content" android:layout_height="wrap_content"> </WebView> </RelativeLayout>
然后 在编写java代码
首先先从简单的方式入手
public class MainActivity extends Activity {private WebView mWebView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mWebView = (WebView) findViewById(R.id.webview);// 开始加载网页 mWebView.loadUrl("http://www.baidu.com");}
看似很难的 webview 实际 就是这么简单 , 但是不要忘了在清单文件中 加上下面的 权限
<uses-permission android:name="android.permission.INTERNET"/>
----------------------------------------------------------------------------------------------------------------------------------------------------
上面是 一个简单的代码 示例 那么下面我们将主键的 深层次的 了解 webview
由于系统默认是禁止掉JavaScript控件的 因为js有一定的安全风险, 弄不好会出问题
但是不开启又会出现一个很奇怪的问题,就是有些按钮点了没反应。因为很多网页的控件是通过JS编写的,关闭时无法响应JS控件。
开启后 就可以点击 , 也看到 弹出的 广告 和 网站轮播图 相关的一些效果了
代码如下:
WebSettings setting = mWebView.getSettings();
setting.setJavaScriptEnabled(true);
还可以添加一些其他的 辅助功能
//植入一个缩放的控制 , 显示放大缩小的按钮 setting.setBuiltInZoomControls(true); //双击缩放 setting.setUseWideViewPort(true);
----------------------------------------------------------------------------------------------------------------------------------------------------
//还可以给webview 设置一个监听 让其点击之后不自动跳转到浏览器 //此监听就是整个webview的 一个生命周期 mWebView.setWebViewClient(new WebViewClient(){ //当页面开始加载的时候 @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); System.out.println("页面开始加载了.........."); } //当页面跳转的时候 @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { //当跳转的时候页面会返回一个url System.out.println("跳转连接:" + url); // 此时返回的 return super.shouldOverrideUrlLoading(view, url) 会判断当前跳转到哪里 //通常是跳转到浏览器的 , 为了让其在当前的webview 来加载的话 //可以更改返回的代码 // mWebView.loadUrl(url); //让其直接在当前webview 显示链接地址中的内容
监听页面 是否有电话号码 有的话 就拨打 电话
if (url.startsWith("tel:")){ Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity(intent); return true; } // else if(url.startsWith("http:") || url.startsWith("https:")) { // view.loadUrl(url); // }
// 发送短信的 方法
return true; //不让其判断 直接返回 }if (url.startsWith("sqwems:")) { Uri uri = Uri.parse(url); // url : 的格式为 "smsto:18888888888" Intent intent = new Intent(Intent.ACTION_SENDTO, uri);intent.putExtra("sms_body", "android...");startActivity(intent); return true;}// 需要加上下面的 两个权限//<uses-permission android:name="android.permission.CALL_PHONE" /> //<uses-permission android:name="android.permission.SEND_SMS"/>
//当页面加载结束的时候
@Override
public void onPageFinished(WebView view, String url) {
System.out.println("页面加载结束了..........");
super.onPageFinished(view, url); }});
-------------------------------------------------------------------------------------------------------------------------------------------------------------
为了更好的体验 在加载的时候 有个提示
mWebView.setWebChromeClient(new WebChromeClient(){ //获取网页标题 @Override public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title); System.out.println("页面标题 : " +title); } //进度发生变化 @Override public void onProgressChanged(WebView view, int newProgress) { super.onProgressChanged(view, newProgress); System.out.println("加载进度 : " +newProgress); } });
----------------------------------------------------------------------------------------------------------------------------------------------------------
以上代码 了解之后 还有一个 小细节 就是 当我们 在 点击返回键的时候 系统会将当前的 activity finish 掉 为了 更好的 体验 在点击返回键的时候 返回的 是上一个页面 可以重写返回键
@Override public void onBackPressed() { // mWebView.goBack(); 返回上一页 //但是在返回到第一页的时候 要将当前的activity关闭掉 //而 goBack 无法 关闭 activity 所以 需要做一个判断 if(mWebView.canGoBack()){ //判断是否能返回 mWebView.goBack(); //返回 还可以增加一个跳转按钮 在这里 就不过多演示了 感兴趣的朋友可以自己增加 // mWebView.goForward(); //跳到下一个网页 但是前提是之前浏览过,要有历史记录 // mWebView.canGoForward(); //判断能否跳到下一页 }else{ finish();//关闭当前页面 } }
代码下载 : http://download.youkuaiyun.com/detail/q9104422999/9627562