韌館-LearnHouse

[Android]Hello WebView

本來一直是想寫Android,但實際工作後卻有很多的任務讓我無法這麼快碰到我想要寫的Android

剛好這周末沒安排什麼活動,也沒什麼事情可做,就來自己寫一個Hello Android

前鎮子因為工作任務需要,所以研究了Phone7(四月底以前應該就會在市場上線了)

研究同時寫了一篇Microsoft.Phone.Controls.WebBrowser應用

所以同樣的Android也會有同樣的應用,所以就把她來當作第一次寫程式的Hello Android

剛好結合前陣子看完一本投資理財的雜誌,突發奇想結合yahoo的股票系統,自動算出殖利率,讓Android也能透過瀏覽器直接使用。

在這裡我就不墜述怎麼安裝IDE與SDK,這方面網路文章應該多不勝數,這裡就直接開始說怎麼寫Hello WebVew

首先一開始,在使用這個類別時要先在AndroidManifest.xml加入<uses-permission android:name="android.permission.INTERNET"/>來允許軟體據有存取網路的權限

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
 package="tw.com.learnhouse"
 android:versionCode="1"
 android:versionName="1.0" >

 <uses-sdk android:minSdkVersion="15" />
 <uses-permission android:name="android.permission.INTERNET"/>

 <application
 android:icon="@drawable/ic_launcher"
 android:label="@string/app_name" >
 <activity
 android:name=".StockActivity"
 android:label="@string/app_name" >
 <intent-filter>
 <action android:name="android.intent.action.MAIN" />

 <category android:name="android.intent.category.LAUNCHER" />
 </intent-filter>
 </activity>
 </application>

</manifest>

如果沒加那一段的話,怎樣都無法連到網際網路而出現如下畫面

再來就是在Layout中加入WebView,打開main.xml並加入WebView layout相關敘述

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:orientation="vertical" >

 <TextView
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:text="@string/hello" />

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

</LinearLayout>

之後就剩程式碼的實作了:

package tw.com.learnhouse;

import android.app.Activity;
import android.os.Bundle;
import android.webkit.*;

public class StockActivity extends Activity {
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.main);

 String stockURL = "http://learn-house.idv.tw/?page_id=1140";
 WebView stockBrowser = (WebView)findViewById(R.id.webStockView);

 WebSettings websettings = stockBrowser.getSettings();
 websettings.setSupportZoom(true);
 websettings.setBuiltInZoomControls(true);
 websettings.setJavaScriptEnabled(true);

 stockBrowser.setWebViewClient(new WebViewClient());
 //stockBrowser.setWebChromeClient(new WebChromeClient());
 stockBrowser.loadUrl(stockURL);
 }
}

在這裡要特別的提醒寫程式的人員,在寫任何程式都要定義自己的package名稱

這是為了防止一個大專案裡或者不同廠商所一起撰寫的專案,個別廠商在類別命名時有同樣的類別名稱發生

這也是我在寫Phone7的dll給其他廠商使用時發現,原來namespace(就是java的package)是這麼的重要

上述程式碼應該不用多說明就能猜得出來每行代表的用意

一開始先使用WebView類別來取得我們在layout設定的瀏覽器識別id

再來用WebSettings類別來做瀏覽器的一些設定

websettings.setSupportZoom(true);//支援Zoom In/Out
 websettings.setBuiltInZoomControls(true);//滾動時顯示縮放的+/-控制
 websettings.setJavaScriptEnabled(true);//支援JavaScript

最後加入stockBrowser.loadUrl(stockURL);就能啟動瀏覽器並載入指定的URL網頁

開啟網頁後如果你想繼續使用你自己的瀏覽器,就必須再加入stockBrowser.setWebViewClient(new WebViewClient());

而在呼叫的時候會發現有setWebViewClient與setWebChromeClient

兩個差別在於setWebChromeClient有比較多的支援,可以用來處理比較豐富的網頁效果與JS的使用

但一般的網頁WebViewClient就很夠使用了。最後成品圖就如下畫面囉!

2012年4 月 posted by admin in 程式&軟體 and have No Comments

Place your comment

Please fill your data and comment below.
名稱:
信箱:
網站:
您的評論: