文為原創,如需轉載,請註明作者和出處,謝謝!
Android這個詞已強佔我們的眼球有一段時間了。在此之前,提到Android,沒人會和移動互連網以及Google這兩個當今最火辣的詞聯絡起來。然而,自從Google推出自己的移動作業系統Android以來,Android、Google和移動互連網就好像10年前的Windows、微軟和PC作業系統一樣,成為了當今最吸引眼球的組合。
說到Android,現在一點都不會引起歧義,她就是Google最值得驕傲的移動作業系統。雖然Android並不是第一個智能手機作業系統,當然,也不會是最後一個智能手機作業系統。但她卻僅在出生不到兩年時間裡成為了有望超越一切的移動作業系統。甚至在美國2010年第2季度的Android手機銷量已經超越被認為是銷售之王的IPhone。成為了當今銷量增長最快的系統。取得這些成績,當然,Android取得今天這些成績除了出身名門外,還有就是Android的免費開源。任何人、任何組織都可以免費使用Android,而無需付給Google一分錢。由於這些好處,使用支援Android的手機廠商越來越多。甚至被譽為“山寨之王”的聯發科也在研製支援Android的晶片,如果成功,Android手機的價格有望降到1000元以下,如果大多數Android手機真到了這個價格,那將會成為Android的另一個殺手鐧。
Android除了其客觀的優勢外,主要面向移動互連網也是Android成功的一個主要因素。大筆者寫作本文時,Android的最新版本是2.2。經過試用,感覺Android 2.2的瀏覽器速度較以前的版本有了非常大的提高,Android 2.2的瀏覽器被稱為世界上最快的移動瀏覽順口 。在Android 2.2中還加入了新的Just-In-Time(JIT)技術,使用在Android 2.2中啟動並執行程式的運行速度較以前的版本快了2.5倍。
Android的瀏覽器速度的提升也會為我們的應用程式提供更多的選擇.傳統的Android應用程式的UI都由Android組件來實現。而我們有了更快的瀏覽器,可以將在PC領域風起雲湧的AJAX與行動瀏覽器結合來向使用者展現更絢麗的介面。說起AJAX,可能從事Web開發的程式員並不會陌生。在最近幾年國內外也出現了很多流行的AJAX架構。其中Ext JS就是其中的佼佼者。Ext JS主要用於設計Web介面,其中大量使用了JavaScript和Ext JS技術,但使用起來卻很容易。例如,Ext JS可以很容易地類比Windows XP的介面,當然,這個介面是基於Web的。在《人人都玩開心網:Ext JS + Android + SSH整合開發web與移動SNS》一書中通篇來完成一個利用Ext JS技術實現的SNS系統,介面就模仿了Windows XP的風格,見圖1所示。
顯然,加入了Ext JS的Web程式要比傳統的Web程式絢麗得多。既然PC可以如此,那麼手機為什麼不呢?經過筆者的測試,Ext JS也同樣可以在Android內嵌的手機瀏覽器中使用,讓我們看看2所示的實際效果。
如果本文的讀者是開發人員,那麼就需要使用Android SDK的WebView組件來顯示我們需要的內容。在《人人都玩開心網:Ext JS + Android + SSH整合開發web與移動SNS》一書中除了提供了提供了一個完整的基於Web版的SNS,還開發了一個基於Android的SNS。在這個Android版的SNS中,利用了WebView組件來顯示服務端返回的HTML格式的內容。當然,如果讀者也可以向其中嵌入AJAX、Ext JS等進階特性。
Android的WebView固然強大,不過很多時候還要依賴於Android組件。這些組件的常規的使用方法這裡就不必說了,而在這些組件中還有很多比較有趣的使用方法。例如,使用過QQ for Android的開發人員可能會發現,在輸入聊天記錄時,可以直接將表情映像放到EditText組件中(3所示)。也許會多初學者會感覺實現這個功能比較困難,但實際上實現這個功能再簡單不過了。
我們一般通過EditText的setText方法來設定EditText中的文本,例如如下的代碼向EditText添加了一個字串。
EditText edittext = (EditText)findByView(R.id.edittext);
Edittext.setText(“測試資料”);
我們只需要對上面的代碼稍微做一下手腳,就可以實現將映像插入到EditText中的目的。如果讀者看過《Android/OPhone開發完全講義》,會發現書中在很多情況下使用了文本標記(類似於HTML語言的標籤,但只包含了十分有限的HTML語言的功能)。在這些標記中有一個<img>標記。通過這個標記,可以很容易地實現將映像插入到EditText的功能。不過使用<img>標籤要比使用其他的標籤多一個步驟,這就是要實現一個ImageGetter介面,通過這個介面,可以獲得一個Drawable對象。先看看如下的代碼:
ImageGetter imageGetter = new ImageGetter()
{
@Override
public Drawable getDrawable(String source)
{
int id = Integer.parseInt(source);
Drawable d = getResources().getDrawable(id);
d
.setBounds(0, 0, d.getIntrinsicWidth(), d
.getIntrinsicHeight());
return d;
}
};
上面的代碼通過ImageGetter介面的getDrawable方法返回了一個Drawable對象,其中source參數的值就是<img>標籤的src屬性的值。我們需要通過如下的代碼來使用<img>標籤。
editText.append(Html.fromHtml("<img src='"
+ faces[new Random().nextInt(6)] + "'/>", imageGetter, null));
其中faces是一個int類型數組,儲存了相應的drawable資源的ID值。在使用<img>標籤之前需要使用Html.fromHtml方法來封裝這些標籤,如果使用的是<img>標籤,需要使用fromHtml方法的第2個參數指定ImageGetter對象,以便通過<img>標籤的src屬性獲得相應的Drawable對象。通過EditText.append方法插入<img>標籤後,系統會自動將<img>標籤轉換成相應的映像顯示在EditText中。下面來看看我們的成果(4所示)。
在本文向讀者展示了Android中的瀏覽器、Ext JS、EditText圖文混排的功能,讀者從中也看到了Android中的繽紛世界。其實Android的功能還遠不只這些。那麼剩下的就留給讀者來挖掘吧。