第一個Android 程序的源代碼: TxtReader文本閱讀器
剛學習Android開發的時候, 試著開發了一個閱讀器,非常簡單,所以易懂, 目前在本人的G1上跑得還是不錯的
^-^
貢獻出來給入門者參考:
主要問題:
1. 如何處理cancel事件
2. ListAdapter的使用
3. 文本編碼.
資源下載地址:
http://download.csdn.net/source/1713476
剛入手的同學可能在導入Android的工程或者某些sample的時候無從下手,
因為單單靠Eclipse import project解決不了所有的問題。***方案為通過Eclipse 的向導, 將已經存在的代碼工程,
再創建成一個新的工程, 如圖所示的: create project from existing source選項
為了方便大家入門,今天對代碼做一下標注.
1. Android程序的進入點
不要妄圖像學習C或者Java的入門一樣, 有一個main函數供你進入, Android的應用程序運行在一個框架中, 因此main進入點 函數被層層包裹,探尋這個進入點函數,實在是沒有多大的價值(這就跟我們用Visual c++去寫MFC程序一樣, 看到的不是main函數, 唯有寂寞...)
Android框架做得比較精妙:
1. 應用的各個功能,都被切割成一個個的Activity對象
2. Activity都在AndroidManifest.xml這個xml中注冊, 并且規定那個Activity是啟動Activity
3. Activity 之間是可以通信的
以本文的代碼為例, AndroidManifest.xml是這樣的:
- <application android:icon="@drawable/reader" android:label="@string/app_name">
- <activity android:name=".TxtReader"
- android:label="@string/app_name">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- <activity android:name=".ListAllFileActivity" android:label="@string/app_name">
- <intent-filter>
- <action android:name="com.ostrichmyself.txtReader.ListAllFileActivity" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- lt;/activity>
- <activity android:name=".ViewFile" android:label="@string/swich_code">
- <intent-filter>
- <action android:name="com.ostrichmyself.txtReader.ViewFile" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- lt;/activity>
- </application>
很好奇,為什么會有三個Activity? 大致的思路是這樣的:
1. 進入應用程序的時候,需要有一個Button,選擇一個目錄
2. 瀏覽目錄
3. 選中文件的瀏覽目錄之后,需要呈現Txt文件的內容
可能大家會覺得奇怪, 為什么按照這樣的思路去劃分Activity,這樣會不會造成管理Activity的困難?
回答這個疑問前, 看看Activity的劃分標準是什么,這里牽涉到界面的知識:
1. 每個Activity都表征了一種形式的界面, 比如你的應用程序中有多少個不同的界面,就將出現多少個不同的Activity
2. Activity通過加載一個界面文件xml, 來表征界面的特點
為什么要這么做?
原因是,界面的繪制牽涉到系統資源的調配,手機終端不同于PC,手機系統資源緊缺, 銷毀重繪這樣耗時費勁的工作,不宜重復進行。因此Android中將這些不同的界面綁定到不同的Activity中,當手機由一種風格的Activity切換到另外風格的Activity時,節省時間和系統資源。
程序如何實現Activity的切換?切換時,如何夾帶信息?
- protected void onListItemClick(ListView l, View v, int position, long id) {
- Intent intent = new Intent(ListAllFileActivity.this, ViewFile.class);
- bundle = new Bundle();
- File file = fileNameList.get(position);
- if (file.isDirectory())
- {
- File[] f = file.listFiles();
- fill(f);
- }
- else {
- bundle.putString(fileNameKey, file.getAbsolutePath());
- intent.putExtras(bundle);
- startActivityForResult(intent, 0);
- }
- }
Intent構造下一個將要出現的Activity, 并夾帶 Bundle(); 然后Activity類中提供了startActivityForResult的方法,讓你啟動, 夠簡單吧!
在將要啟動的Activity中oncreate方法啟動,將Bundle的值取出來, 搞定.
整個流程大致可以這樣描述:
Bundle
Activity被觸發---------------> 加載Bundle -----> 加載GUI及其Layout(XML或者自己寫Layout)
----> 展示GUI----> 觸發GUI事件 ---> 其他Activity 被觸發----> 繼續....
菜單布局等細節, 實在沒什么更多的內容。
Android的布局方式很贊,采用了HTML的配置布局方式,非常不錯, 界面本來就是配的,而不是代碼寫的。 所以J2ee轉業過來的同學們, 這個難度實在是太小了。
另外從Eclipse RCP開發過來的同學們, plugin.xml這個是再熟悉不過的了, 所以你們轉過來學習Android的布局和配置管理,應該也是輕松加愉快了。
后面深入補充下Activity的知識。 界面這塊,有時間再探索下。