一。使用WebView
主要步骤:
1。在布局文件中加入 WebView组件
2. 在Activity中实例 化这个 组件
3. 设置WebView 客户端,如果 不设置,将使用默认的内置浏览器
4. 加载 URL,显示网页
具体的如下。
1. 在布局文件中加入 WebView组件
<WebView android:layouy_width ="fill_parent" android:layouy_height = "wrap_content" android:id ="@+id/wv1" </WebView>
2. 在代码 中实例 化这个 组件
Activity.findViewById(R.id.wv1);
3. 设置WebView 客户端
WebViewClient client = new WebViewClient (){.......}
在新建 时,我们可以重写 里面的一些 方法。如
onLoadResource()
onPageStart()
onPageFinish()
onReceiverError()
4. 加载 URL,显示网页
WebView.loadUrl (String url );
例子:整体架构
public class WebDemo extends Activity { EditText et; Button goBtn ; WebView wv; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.web_demo); et= (EditText )findViewById(R.id.et1); goBtn =(Button)findViewById(R.id.goBtn); wv= (WebView)findViewById(R.id.wv1); //新建客户端 WebViewClient client =new WebViewClient (){}; //设置客户端 wv.setWebViewClient(client); goBtn.setOnClickListener(new OnClickListener(){ public void onClick(View v) { // TODO Auto-generated method stub String url = et.getText().toString(); if (URLUtil.isNetworkUrl(url)){ wv.loadUrl(url); //加载 URL }else { Toast.makeText(getBaseContext(), url, Toast.LENGTH_SHORT).show(); } } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.web_demo, menu); return true; } }
二。重写 WebViewClient
上面 的太简陋了,我们现在重写WebViewClient 以加入 更多 的功能 ,这里我们重写 三个方法:
onPageStarted() :在页面开始 时,提示用户正在载入
onLoadResource ( ) :在加载资源 时,提示正在 加载 的URL
onPageFinished(): 在页面加载 结束 时,将页面截屏保存
WebViewClient client =new WebViewClient (){ public void onLoadResource(WebView view, String url) { Toast.makeText(getBaseContext(), "正在载入"+url, Toast.LENGTH_SHORT).show(); super.onLoadResource(view, url); } @Override public void onPageFinished(WebView view, String url) { Picture pic = view.capturePicture(); //得到网页的图片 //得到图片的长和宽 int width = pic.getWidth(); int height =pic.getHeight(); //如果宽or高为0 ,则不再执行 if (height * width==0){ return ; } //新建 位图,用来 存放 数据 Bitmap bitmap = Bitmap.createBitmap(width,height, Bitmap.Config.ARGB_8888); //新建图布,指定 要画的位图对象 Canvas canvas = new Canvas(bitmap); //将图片画到画布上 pic.draw(canvas); try { File file = new File (Environment.getExternalStorageDirectory().getPath()+"/pic.jpg"); if (file.exists()) file.delete(); file.createNewFile(); //得到输出 流 FileOutputStream fos = new FileOutputStream (file); if (fos!=null){ bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fos); //压缩成JPEG } Toast.makeText(getBaseContext(), "照片保存成功", Toast.LENGTH_SHORT).show(); } catch (IOException e) { Toast.makeText(getBaseContext(), "IOException", Toast.LENGTH_SHORT).show(); } super.onPageFinished(view, url); } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { Toast.makeText(getBaseContext(), "正在载入", Toast.LENGTH_SHORT).show(); super.onPageStarted(view, url, favicon); } };
三。放大与缩小菜单
例子:
public static final int GO_ID=1; public static final int BACK_ID=2; public static final int ZOOMOUT_ID=3; public static final int ZOOMIN_ID=4; public static final int DEFAULT_ID=5;
public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. menu.add(0, GO_ID, 0, "前进"); menu.add(0, BACK_ID, 1, "后退"); menu.add(0, ZOOMOUT_ID, 2, "放大"); menu.add(0, ZOOMIN_ID, 3, "缩小"); menu.add(0, DEFAULT_ID, 4, "默认"); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()){ case GO_ID: if (wv.canGoForward()){ wv.goForward(); } return true; case BACK_ID: if (wv.canGoBack()){ wv.goBack(); } return true; case ZOOMOUT_ID: settings.setDefaultZoom(WebSettings.ZoomDensity.CLOSE); return true; case ZOOMIN_ID: settings.setDefaultZoom(WebSettings.ZoomDensity.FAR); return true; case DEFAULT_ID: settings.setDefaultZoom(WebSettings.ZoomDensity.MEDIUM); return true; } return super.onOptionsItemSelected(item); }