Android入门笔记 - 网络通信 - WebKit
来源:互联网 发布:windows多进程编程 编辑:程序博客网 时间:2024/05/25 05:37
今天来接触一下android中自带的浏览器控件 WebView。
先上一张效果图:
分为上中下三个部分,上面是EditText和Button,中间区域是WebView,下面是一个进度条显示网页加载进度。
1. layout/ activity_main.xml
<LinearLayout 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" android:orientation="vertical" tools:context=".MainActivity" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="0" android:orientation="horizontal" > <EditText android:id="@+id/et_address" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:hint="url" android:singleLine="true" /> <Button android:id="@+id/btn_loadurl" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="跳转" /> </LinearLayout> <WebView android:id="@+id/web" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" /> <ProgressBar android:id="@+id/progress" style="?android:attr/progressBarStyleHorizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="0" /></LinearLayout>
2. MainActivity.java :
package com.example.ch8_03_webkit;import android.os.Bundle;import android.app.Activity;import android.app.AlertDialog;import android.content.Context;import android.content.DialogInterface;import android.graphics.Bitmap;import android.util.Log;import android.view.Menu;import android.view.View;import android.webkit.JsResult;import android.webkit.WebChromeClient;import android.webkit.WebView;import android.webkit.WebViewClient;import android.widget.Button;import android.widget.EditText;import android.widget.ProgressBar;import android.widget.Toast;public class MainActivity extends Activity {private static final String TAG = "MainActivity";private final Activity mActivity = this;private Context mContext = this;private Button mBtnLoadUrl;private WebView mWebView;private EditText mEtUrl;private ProgressBar mProgressBar;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mEtUrl = (EditText) findViewById(R.id.et_address);mBtnLoadUrl = (Button) findViewById(R.id.btn_loadurl);mWebView = (WebView) findViewById(R.id.web);mProgressBar = (ProgressBar) findViewById(R.id.progress);mProgressBar.setVisibility(View.GONE);initWebView(mWebView);mBtnLoadUrl.setOnClickListener(new LoadurlListener());} class LoadurlListener implements View.OnClickListener { @Override public void onClick(View v) { String url = mEtUrl.getText().toString(); if (url != null && !url.equals("")) { if (!url.contains("http://") && !url.contains("file:///")) { url = "http://" + url; } openUrl(url); } else { showToast("url不能为空"); } } }private void initWebView(WebView webview) {mWebView.getSettings().setJavaScriptEnabled(true);mWebView.getSettings().setAllowFileAccess(true);mWebView.getSettings().setBuiltInZoomControls(true);mWebView.setWebViewClient(new WebViewClient() {public boolean shouldOverrideUrlLoading(WebView view, String url) {view.loadUrl(url);return true;}@Overridepublic void onPageFinished(WebView view, String url) {// TODO Auto-generated method stubsuper.onPageFinished(view, url);}@Overridepublic void onPageStarted(WebView view, String url, Bitmap favicon) {// TODO Auto-generated method stubsuper.onPageStarted(view, url, favicon);}});webview.setWebChromeClient(new WebChromeClient() {public void onProgressChanged(WebView view, int progress) {mProgressBar.setProgress(progress);if (progress == 100) {mProgressBar.setVisibility(View.GONE);} else {mProgressBar.setVisibility(View.VISIBLE);}}@Overridepublic void onReceivedTitle(WebView view, String title) {mActivity.setTitle(title);super.onReceivedTitle(view, title);}@Overridepublic boolean onJsAlert(WebView view, String url, String message,final JsResult result) {AlertDialog.Builder builder = new AlertDialog.Builder(mContext);builder.setTitle("提示对话框");builder.setMessage(message);builder.setPositiveButton("OK",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog,int which) {result.confirm();}});builder.setCancelable(true);builder.create();builder.show();return true;}@Overridepublic boolean onJsConfirm(WebView view, String url,String message, final JsResult result) {AlertDialog.Builder builder = new AlertDialog.Builder(mContext);builder.setTitle("可选择对话框");builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {result.confirm();}});builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {result.cancel();}});builder.setCancelable(true);builder.create();builder.show();return true;}});}@Overridepublic void onBackPressed() {if (mWebView.canGoBack()) {mWebView.goBack();return;}super.onBackPressed();}private void openUrl(String url) {mWebView.loadUrl(url);}private void showToast(String words) {Toast.makeText(mContext, words, Toast.LENGTH_SHORT).show();}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.main, menu);return true;}}
WebView常用方法:
WebView. loadUrl( String url) : 加载网页
WebView. canGoBack() , WebView.goBack() :判断是否可回退, 网页回退
WebView中可通过 getSetting() 方法获取到设置,可以做网页的相应设置,比如是否相应 javascript,是否可访问文件,设置是否可缩放等等:
mWebView.getSettings().setJavaScriptEnabled(true); mWebView.getSettings().setAllowFileAccess(true); mWebView.getSettings().setBuiltInZoomControls(true);
WebView通过设置WebViewClient设置加载网页方式,网页加载完毕,网页开始加载时的动作:
mWebView.setWebViewClient(new WebViewClient() {public boolean shouldOverrideUrlLoading(WebView view, String url) {view.loadUrl(url);return true;}@Overridepublic void onPageFinished(WebView view, String url) {// TODO Auto-generated method stubsuper.onPageFinished(view, url);}@Overridepublic void onPageStarted(WebView view, String url, Bitmap favicon) {// TODO Auto-generated method stubsuper.onPageStarted(view, url, favicon);}});
WebView还可通过设置WebChromeClient设置更详细的细致的配置,比如加载进度,html的title,相应js等:
webview.setWebChromeClient(new WebChromeClient() {public void onProgressChanged(WebView view, int progress) {mProgressBar.setProgress(progress);if (progress == 100) {mProgressBar.setVisibility(View.GONE);} else {mProgressBar.setVisibility(View.VISIBLE);}}@Overridepublic void onReceivedTitle(WebView view, String title) {mActivity.setTitle(title);super.onReceivedTitle(view, title);}@Overridepublic boolean onJsAlert(WebView view, String url, String message,final JsResult result) {AlertDialog.Builder builder = new AlertDialog.Builder(mContext);builder.setTitle("提示对话框");builder.setMessage(message);builder.setPositiveButton("OK",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog,int which) {result.confirm();}});builder.setCancelable(true);builder.create();builder.show();return true;}@Overridepublic boolean onJsConfirm(WebView view, String url,String message, final JsResult result) {AlertDialog.Builder builder = new AlertDialog.Builder(mContext);builder.setTitle("可选择对话框");builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {result.confirm();}});builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {result.cancel();}});builder.setCancelable(true);builder.create();builder.show();return true;}});
WebView中的方法太多,大家可以自己去查。
这里需要注意的是,打开本地html文件和服务器上的html文件方式是不一样的:
服务器: http:// www.baidu.com
本地 : file:/// android_asset/ test.html
0 0
- Android入门笔记 - 网络通信 - WebKit
- Android入门笔记 - 网络通信 - HttpURLConnection
- Android入门笔记 - 网络通信 - HttpClient
- Android入门笔记 - 网络通信 - Socket
- 【Android】【笔记】《Android 入门经典》part 13 网络通信技术
- Android网络通信--学习笔记
- Android网络通信(笔记)
- Android webkit学习笔记
- Android笔记之 网络http通信
- Android开发入门之网络通信(网络图片查看器)
- Android网络通信之android-async-http入门
- socket网络通信入门
- Android开发入门之网络通信(网页源码查看器)
- Android开发入门之网络通信(资源客户端)
- Android入门笔记 - 数据存储 - 网络
- 通信网络学习笔记
- java 网络通信 笔记
- Android网络编程之WebKit应用
- Java堆.栈和常量池
- LCOJ - Majority Element
- LeetCode算法练习Majority Element
- DOM解析XML格式数据
- 读取xls和xlsx
- Android入门笔记 - 网络通信 - WebKit
- sgu178:Chain(数学题)
- Curses library not found. Please install appropriate package
- android中的ellipsize
- 一条不知通向代码的道路
- OpenGL ES 着色器(shader)介绍
- ACM-签到 小学题
- twisted入门教程之一:Twisted理论基础
- POJ3177 Redundant Paths (双联通缩点)