【Android开发】网路编程及Internet应用-使用WebView显示网页
16lz
2021-01-23
Android提供了内置的浏览器,该浏览器使用了开源的WebKit引擎。WebKit不仅能够搜索网址、查看电子邮件,而且能够播放视频节目。在Android中,要使用内置的浏览器,需要通过WebView组件来实现。通过WebView组件可以轻松实现显示网页功能。
如何在Android中使用WebView组件:
WebView组件使用方法同其它组件一样,既可以使用XML布局文件配置,也可以在java文件中通过new关键字创建。推荐使用XML布局文件配置,配置方法:
Web组件的常用方法:
loadURL(String url) 用于加载指定URL对应的网页
loadData(String data,String mimeType,String encoding) 用于将指定的字符串数据加载到浏览器中
loadDataWithBaseURL(String baseUrl,String data,String mimeType,String encoding,String HistoryUrl) 用于基于URL加载指定的数据
capturePicture() 用于创建当前屏幕的快照
goBack()执行后退操作,相当于浏览器上后退按钮的功能
goForward()执行前进操作,相当于浏览器上前进按钮的功能
stopLoading()用于停止加载当前页面
reload()用于刷新当前页面
下面利用几个实例说明WebView的应用
(1)例子1:使用WebView组件浏览指定网页
res/layout/main.xml:
MainActivity:
别忘记在AndroidManifest.xml中加入访问网络的权限:
(2)例子2:使用WebView加载HTML代码
在进行Android开发时,对于一些游戏的帮助信息,使用HTML代码进行显示比较实用,不仅可以让界面更加美观,而且可以让开发更加简单、快捷。
需要使用loadDataWithBaseURL()方法加载HTML代码,基本语法格式如下:
loadDataWithBaseURL(String baseUrl,String data,String mimeType,String encoding,String HistoryUrl)
其中各项参数说明如下:
baseUrl:用于指定当前页面使用的基本URL。如果为null,则使用默认的about:blank,即空白页
data:用于指定要显示的字符串数据
mimeType:用于指定要显示的MIME类型。如果为null,则默认使用text/html
encoding:用于指定数据的编码方式
history:用于指定当前的历史URL,也就是进入该页前显示页的URL。如果为null,则使用默认的about:blank。
下面用一个实例来说明如何使用WebView组件加载HTML代码:
res/layout/main.xml:
MainActivity:
别忘记在AndroidManifest.xml中加入访问网络的权限:
(3)例子3:让WebView支持JavaScript
在默认的情况下,WebView是不支持JavaScript的,但是有些网页有需要实现JavaScript功能。这个时候要为WebView加入兼容JavaScript的功能。利用以下两个步骤:
a.使用WebView组件的WebSettings对象提供的setJavaScriptEnabled()方法让JavaScript可用。
webview.getSettings().setJavaScriptEnabled(true);//设置WebView组件兼容JavaScript
b.通过上面的设置,大部分JavaScript可用,但是对于通过window.alert()方法弹出的对话框不可用。要想显示弹出的对话框,需要使用WebView组件的setWebChromeClient()方法来处理JavaScript的对话框,具体代码如下:
webview.setWebChromeClient(new WebChromeClient());
下面通过一个具体的实例来说明如何让WebView组件支持JavaScript
res/layout/main.xml:
MainActivity:
别忘记在AndroidManifest.xml中加入访问网络的权限:
实现一个包含前进、后退功能并支持JavaScript的网页浏览器
布局XML文件中包含前进和后退按钮,一个URL地址输入框,一个"GO"按钮,还有下方的WebView组件
res/layout/main.xml:
MainActivity:
别忘记在AndroidManifest.xml中加入访问网络的权限:
如何在Android中使用WebView组件:
WebView组件使用方法同其它组件一样,既可以使用XML布局文件配置,也可以在java文件中通过new关键字创建。推荐使用XML布局文件配置,配置方法:
<WebView android:id="@+id/webView1" android:layout_width="match_parent" android:layout_height="match_parent"/>
Web组件的常用方法:
loadURL(String url) 用于加载指定URL对应的网页
loadData(String data,String mimeType,String encoding) 用于将指定的字符串数据加载到浏览器中
loadDataWithBaseURL(String baseUrl,String data,String mimeType,String encoding,String HistoryUrl) 用于基于URL加载指定的数据
capturePicture() 用于创建当前屏幕的快照
goBack()执行后退操作,相当于浏览器上后退按钮的功能
goForward()执行前进操作,相当于浏览器上前进按钮的功能
stopLoading()用于停止加载当前页面
reload()用于刷新当前页面
下面利用几个实例说明WebView的应用
(1)例子1:使用WebView组件浏览指定网页
res/layout/main.xml:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/ll1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <WebView android:id="@+id/webView1" android:layout_width="match_parent" android:layout_height="match_parent"/></LinearLayout>
MainActivity:
package com.example.test; import android.app.Activity;import android.os.Bundle;import android.webkit.WebView; public class MainActivity extends Activity{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); WebView web=(WebView)findViewById(R.id.webView1); web.loadUrl("http://www.baidu.com"); //处理各种通知请求和事件,如果不使用该句代码,将使用内置浏览器访问网页 web.setWebViewClient(new WebViewClient()); }}
别忘记在AndroidManifest.xml中加入访问网络的权限:
<!-- 添加链接网络的权限 --><uses-permission android:name="android.permission.INTERNET"/>
运行结果如图
(2)例子2:使用WebView加载HTML代码
在进行Android开发时,对于一些游戏的帮助信息,使用HTML代码进行显示比较实用,不仅可以让界面更加美观,而且可以让开发更加简单、快捷。
需要使用loadDataWithBaseURL()方法加载HTML代码,基本语法格式如下:
loadDataWithBaseURL(String baseUrl,String data,String mimeType,String encoding,String HistoryUrl)
其中各项参数说明如下:
baseUrl:用于指定当前页面使用的基本URL。如果为null,则使用默认的about:blank,即空白页
data:用于指定要显示的字符串数据
mimeType:用于指定要显示的MIME类型。如果为null,则默认使用text/html
encoding:用于指定数据的编码方式
history:用于指定当前的历史URL,也就是进入该页前显示页的URL。如果为null,则使用默认的about:blank。
下面用一个实例来说明如何使用WebView组件加载HTML代码:
res/layout/main.xml:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/ll1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <WebView android:id="@+id/webView1" android:layout_width="match_parent" android:layout_height="match_parent"/></LinearLayout>
MainActivity:
package com.example.test; import android.app.Activity;import android.os.Bundle;import android.webkit.WebView;import android.webkit.WebViewClient; public class MainActivity extends Activity{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); WebView web=(WebView)findViewById(R.id.webView1); //处理各种通知请求和事件,如果不使用该句代码,将使用内置浏览器访问网页 web.setWebViewClient(new WebViewClient()); StringBuilder sb=new StringBuilder(); sb.append("<div style=\"color:#CCCCCC\">工具栏菜单说明</div>"); sb.append("<ul>"); sb.append("<li>这是说明的第一行</li>"); sb.append("<li>这是说明的第二行</li>"); sb.append("<li>这是说明的第二行</li>"); sb.append("</ul>"); web.loadDataWithBaseURL(null, sb.toString(), "text/html", "utf-8", null);//加载数据 }}
别忘记在AndroidManifest.xml中加入访问网络的权限:
<!-- 添加链接网络的权限 --><uses-permission android:name="android.permission.INTERNET"/>
运行结果如图
(3)例子3:让WebView支持JavaScript
在默认的情况下,WebView是不支持JavaScript的,但是有些网页有需要实现JavaScript功能。这个时候要为WebView加入兼容JavaScript的功能。利用以下两个步骤:
a.使用WebView组件的WebSettings对象提供的setJavaScriptEnabled()方法让JavaScript可用。
webview.getSettings().setJavaScriptEnabled(true);//设置WebView组件兼容JavaScript
b.通过上面的设置,大部分JavaScript可用,但是对于通过window.alert()方法弹出的对话框不可用。要想显示弹出的对话框,需要使用WebView组件的setWebChromeClient()方法来处理JavaScript的对话框,具体代码如下:
webview.setWebChromeClient(new WebChromeClient());
下面通过一个具体的实例来说明如何让WebView组件支持JavaScript
res/layout/main.xml:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/ll1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <CheckBox android:id="@+id/checkBox1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="允许执行JavaScript代码"/> <WebView android:id="@+id/webView1" android:layout_width="match_parent" android:layout_height="match_parent"/></LinearLayout>
MainActivity:
package com.example.test; import android.app.Activity;import android.os.Bundle;import android.webkit.WebChromeClient;import android.webkit.WebView;import android.webkit.WebViewClient;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.CompoundButton.OnCheckedChangeListener; public class MainActivity extends Activity{ private WebView webview; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); webview=(WebView)findViewById(R.id.webView1); //处理各种通知请求和事件,如果不使用该句代码,将使用内置浏览器访问网页 webview.setWebViewClient(new WebViewClient()); CheckBox checkBox=(CheckBox)findViewById(R.id.checkBox1); checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {if(isChecked){webview.getSettings().setJavaScriptEnabled(true);//设置JavaScript可用webview.setWebChromeClient(new WebChromeClient());//指定要加载的网页(含有JavaScript的网页,读者可自行寻找此类网址)webview.loadUrl("http://acm.hpu.edu.cn/PowerWeb/login.jsp");}else{//指定要加载的网页(含有JavaScript的网页,读者可自行寻找此类网址)webview.loadUrl("http://acm.hpu.edu.cn/PowerWeb/login.jsp");}}}); //指定要加载的网页(含有JavaScript的网页,读者可自行寻找此类网址) webview.loadUrl("http://acm.hpu.edu.cn/PowerWeb/login.jsp"); }}
别忘记在AndroidManifest.xml中加入访问网络的权限:
<!-- 添加链接网络的权限 --><uses-permission android:name="android.permission.INTERNET"/>
运行结果为图
实现一个包含前进、后退功能并支持JavaScript的网页浏览器
布局XML文件中包含前进和后退按钮,一个URL地址输入框,一个"GO"按钮,还有下方的WebView组件
res/layout/main.xml:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/ll1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="4" android:orientation="horizontal" > <Button android:id="@+id/back" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="后退"/> <Button android:id="@+id/front" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="前进"/> <EditText android:id="@+id/urlText" android:layout_width="150pt" android:layout_height="wrap_content"/> <Button android:id="@+id/go" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="GO"/> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1" android:orientation="horizontal" > <WebView android:id="@+id/webview1" android:layout_width="match_parent" android:layout_height="match_parent"/></LinearLayout></LinearLayout>
界面效果如图
<activity android:name=".MainActivity" android:screenOrientation="landscape" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter></activity>
MainActivity:
package com.example.test; import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.webkit.WebChromeClient;import android.webkit.WebView;import android.webkit.WebViewClient;import android.widget.Button;import android.widget.EditText;import android.widget.Toast; public class MainActivity extends Activity{ private WebView webview;private EditText urlText;private Button goButton;private Button forward;//前进按钮private Button back;//后退按钮 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); webview=(WebView)findViewById(R.id.webview1); //处理各种通知请求和事件,如果不使用该句代码,将使用内置浏览器访问网页 webview.setWebViewClient(new WebViewClient()); webview.getSettings().setJavaScriptEnabled(true);//设置兼容JavaScript webview.setWebChromeClient(new WebChromeClient());//处理JavaScript对话框 urlText=(EditText)findViewById(R.id.urlText); forward=(Button)findViewById(R.id.front); forward.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {webview.goForward();}}); back=(Button)findViewById(R.id.back); back.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {webview.goBack();}}); goButton=(Button)findViewById(R.id.go); goButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {if(!"".equals(urlText.getText().toString())){openBrowser();//浏览网页}else{showDialog();//弹出提示对话框}}}); } protected void showDialog() {new AlertDialog.Builder(MainActivity.this).setTitle("网页浏览器").setMessage("请输入要访问的网址").setPositiveButton("确定",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface arg0, int which) {Log.d("WebView","单击确认按钮");}}).show();}protected void openBrowser() {webview.loadUrl(urlText.getText().toString());//浏览网页Toast.makeText(MainActivity.this, "正在加载:"+urlText.getText().toString(), Toast.LENGTH_SHORT).show();}}
别忘记在AndroidManifest.xml中加入访问网络的权限:
<!-- 添加链接网络的权限 --><uses-permission android:name="android.permission.INTERNET"/>
运行效果如图
怎么样?你掌握WebView的使用技术了吗?赶快动手来做吧!
转载请注明出处:http://blog.csdn.net/acmman/article/details/46489353
更多相关文章
- webView系列(十一)----webview网页调试之setWebContentsDebuggingE
- Android插件化框架系列之类加载器
- Android Jetpack架构组件之Navigation
- android View的background何时加载的
- Android用户界面 UI组件--TextView及其子类(二) Button,selector
- Android 资源加载机制剖析
- 阿里Android开发规范:四大基本组件
- android四大组件--android service详解
- Android 加载SVG动画