編輯:開發入門
(在讀本文之前,會缺省的認為你已經知道如何創建一個android項目,並知道如何在模擬器中運行這個項目。並且,期望你已經有一點Html或者其他GUI的開發經驗。)
在我的理解中,對開發者來說,寫J2SE的程序和J2ME的程序相比,最大的區別不是他們API或者是其他一些規則、限制等的不同,更多的是兩者程序界面(或者說UI)方面的區別。
我們寫任何一段程序,都是需要有UI的,因為我們的程序最終是給用戶去用的,即使我們寫了一個工具,沒有任何顯式IO,我們也還是需要暴露必要的方法來提供別人使用,在此情景下,這些方法似乎也可以看作是UI。
對J2SE來說,一般都不會需要GUI,因為我們很少去寫SWING、SWT程序,即使Sun力推的JavaFX,好像涉及的也不多,而對於 J2ME來說,最大的困難可以就是那些GUI的實現,以及如何將程序的功能綁定到那些界面上,從界面中接收用戶的輸入,或者是用合適、合理的方式向界面輸出,無論是通過文本,或是曲線、圖形。
同理,如果你有J2EE的經驗,服務後台的代碼往往是相對易讀、易懂、系統並且內聚的,這些代碼看起來是如此的和諧、整潔、干淨。而如果涉及到界面,就會陡然復雜的多,即使各種各樣的framework試圖要解決VIEw與Model、Control的協作問題,結果卻讓大家更加的迷惑於各種配置之間。總是有GUI的程序都會看起來有些凌亂和繁蕪。
似乎有些跑題… 打住…:)。咳咳,同樣,對於android開發來說,用戶界面的實現應該是比較重要的和復雜的一環。好消息是,到目前為止,“神仙”們也沒有發現其他更好的用戶界面實現方式,所以說如果有Html設計經驗,或者說有Swing,Flash等圖形設計經驗,那麼理解android的UI設計,會容易的多,甚至會有似曾相識的感覺。
android的用戶界面可以有兩種實現方式:使用XML或者是使用Java代碼。通過直接書寫代碼的方式來實現界面是比較恐怖的事情。舉個例子來說,如果你有DHtml的經驗,那麼這兩者的區別可以比喻為:用XML來實現用戶界面就像直接寫Html代碼,而用 Java代碼來實現用戶界面就像用Javascript創建DOM對象來拼接頁面。所以,使用XML來布局界面應該是首選。
android使用一個XML文件來定義用戶界面。為了方便理解,你可以直接把它理解為一個HTML文件。事實上,它也確實比較像一個Html文件。
這個XML文件的格式為:
<VIEwGroupClass XMLns:android="http://schemas.android.com/apk/res/android"
id="@+id/string_name" (attributes)>
<widget or other nested VIEwGroupClass>+
<requestFocus/>(0 or 1 per layout file, assigned to any element)
</VIEwGroupClass>
這裡面有一個比較重要的類叫VIEwGroup,這個XML的root節點必須是一個VIEwGroup,
從上述這幾個類從名字就可看的出來,他們是Layout,也就是布局,如果用過Swing的話,這些東西和Swing的那套東西一致,如果沒有用過 Swing,希望你用過Html,那麼每一個Layout,可以理解為有了特定排版樣式的DIV。在DIV的內部,可以放置其他的DIV,當然也可以放置最底層的元素,比如說文本、文本框、單選按鈕、圖片等等。這裡面所說的最底層的元素,它們有一個超類叫做View,這個超類非常的超,連 ViewGroup都是它的子類。ViewGroup就是能容納其他View的View。常用的VIEw有很多,可以參考這裡,後文再介紹。 本次學習主要是說android的項目的各個文件的作用,以及相互之間的調用,對於學習andriod軟件開發有很大的好處。只要了解運行機制才能更好的控制各個模塊和用戶的交互。同時這樣能更好的了解他的運行機制以及生命周期。
這些資源文件都是獨立於代碼而存在的,那麼在代碼中又是如何訪問到這些資源的呢? 在 Android的代碼中,有一個文件比較奇怪,第一次接觸到android代碼的人都應該迷惑過,這個文件就是R.Java,在R.Java的注釋部分, 有這樣一段話:“AUTO-GENERATE FILE. DO NOT MODIFY”,這個文件是自動生成的,不要修改。
按照前面的示例,那麼在R.Java中會存在像這樣一段代碼: public final class R {
public static final class attr {
}
public static final class drawable {
public static final int icon=0x7f020000;
}
public static final class layout {
public static final int main=0x7f030000;
}
public static final class string {
public static final int app_name=0x7f040001;
public static final int hello=0x7f040000;
}
}這裡面的main就是由res/layout/main.xml生成的,其他兩個常量是由res/drawable/下icon.png和res/values/strings.XML生成的。
接下來在看一下,如何在Java代碼中使用這個R.java,創建一個文件Adventure.Java :(開始快樂的學習旅程^_^)
package com.penguin.adventure;import android.app.Activity;
import android.os.Bundle;public class Adventure extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentVIEw(R.layout.main);
}
} 注意這其中的R.layout.main,通過setContextVIEw(),被Java程序調用。 這段代碼中引入了另外一個非常重要的概念:Activity,到目前為止,已經介紹的另外兩個比較重要的概念是 ViewGroup和View。如果套用時髦的MVC來理解的話:ViewGroup和View屬於View領域的東西,Activity可以理解為 Control領域的東西,雖然可以這麼類比著來理解,但是Activity其實做了更多的事情,由它將View和一些數據、操作等結合在一起,完成一個相對完整的行為、活動。所以,任何 VIEw要被顯示,必須通過Activity來進行。這樣每個Activity都會包含特定的行為,多個Activity互相合作,最終組成一個完整的 android程序。
在示例的Activity中,有一個onCreate()方法,這個方法會在此Activity被創建的時刻調用。在方法內部,設置此 Activity的視圖為R.layout.main中定義的視圖,也就是res/layout/main.XML中定義的視圖 (視圖、布局、GUI、UI在這裡已經混合使用了,並且他們意義相同,後文統一用View表示)。 Activity所包含的內容很多,會用單獨的一篇文章來詳細介紹。 說到此處,我們應該知道如何創建一個VIEw,並通過Activity將其顯示在屏幕上。接下來事情,就是用戶如何和這個Activity交互。
所以Google Voice Recognition在android 的實現就變得極其輕松。語音識別,借助於雲端技術可以識別用戶的語音輸入,包括語音控制等技術,下面我們
簡介: 這個兩部分文章系列探索了在 android 平台上處理 Internet 上兩種最常見的數據格式 — XML 和 JavaScript Object
本文將從Android官方網站的Activity生命周期結構圖講起,教我們弄清所有的生命周期函數的原理,用實例表現android Activity的生命周期結構。AD:
簡介: Cameron Laird 用一篇對受歡迎的 Expect 工具的概述開啟了他新的月度專欄,Expect 是一種功能大大超出大多數程序員和管理員認識的