Android大致可分爲四層結構,五塊區域。
1、Linux內核層
基於Linux2.6內核。
2、系統運行庫層
庫和運行時庫。
3、應用框架層
提供相應的API。
4、應用層
所有手機應用都屬於這一層。
Android應用開發特色
1、四大組件
活動(Activity)、服務(Service)、廣播接收器(BroadcastReceiver)、內容提供器(Content Provider)。
2、豐富的系統控件
3、SQLite數據庫
支持標準的SQL語句,還可以通過安卓封裝好的API進行操作
4、地理位置定位
5、強大的多媒體
6、傳感器
安卓應用佈局分析
1、src
放置所有java源碼的位置
2、gen
主要是R.java文件,在項目中添加的每一個資源都會在其中生成一個相應的資源ID。
3、assets
主要存放一些隨程序打包的文件,在程序運行時可以動態讀取這些文件。若程序使用了WebView加載本地網頁的功能,所有網頁相關的文件也都會存放在這個目錄下。
4、bin
主要是編譯產生的文件。
5、libs
放置程序使用的第三方包jar,會被自動添加到程序中。
6、res
在項目中使用到的所有圖片、佈局、字符串等資源都存放在此。圖片放在drawable目錄下,佈局放在layout目錄下,字符串放在values目錄下。
7、AndroidMainfest.xml
Android項目的配置文件,程序中定義的所有四大組件都需要在這個文件中註冊。
8、project.properties
通過一行代碼指定編譯程序時所使用的SDK版本。
活動註冊
活動需要在AndroidManifest.xml文件中進行註冊,其中intent-filter裏的兩行代碼很重要,指定了MainActivity爲這個程序的主活動,也就是程序打開時會首先啓動這個活動。
<activity
android:name=".MainActivity"
android:label="@string/app_name"
>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
MainActivity
項目中的活動需要繼承Activity(系統提供的活動基類)才能擁有活動的特性。onCreateOptionMenu()方法用於創建菜單,onCreate()方法是一個活動被創建時必定要執行的方法。安卓講究邏輯和視圖分離,通用的做法是:在佈局文件中編寫界面,然後在活動中引入進來。(使用setContentView()方法)。
字符串的定義
安卓不提倡在程序中對字符串進行硬編碼,所以一般把字符串定義在res/values/strings.xml中。
Res文件夾的構成
以drawable開頭的文件夾是放圖片資源的,以values開頭的文件夾是放字符串的,layout文件夾放佈局文件,menu文件夾放菜單文件。各個drawable文件夾是放置同一圖片的不同分辨率的版本,根據設備而加載不同的圖片,但一般偷懶的話只放一張在drawable-hdpi中。
引用資源
1、在代碼中通過R.string.hello_world引用
2、在xml文件中通過@string/hello_world引用。
語法中string可以被替換成drawable、layout等引用其他類型資源。
Logcat的使用
Tools->Android->Android Device Monitor
1、Log.v()
2、Log.d()
3、Log.i()
4、Log.w()
5、Log.e()
可以通過設置tag爲自己的字符串以用來過濾掉與程序無關的日誌。
簡單活動的設計
爲了實現邏輯和佈局分離,所以需要寫佈局文件,在活動中用setContentView加載,並在AndroidManifest.xml文件中註冊。註冊需要用name指定活動,label顯示爲應用的名稱和標題欄,如果這是主活動則需要加上intent-filter標籤。
<activity
android:name=".FirstActivity"android:label="Thisis
FirstActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
如果不想在活動中顯示標題欄,則可以在onCreate()中加入requestWindowFeature(Window.FEATURE_NO_TITLE),注意這句需要在setContentView前,否則會報錯。
requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.first_layout);
Toast(使用的顯示消息的方法)
在活動文件中通過findViewByID()方法獲取佈局文件中的元素,返回的是一個View對象,向下轉型成Button對象。通過調用setOnClickListener()方法註冊監聽器,點擊時就會執行監聽器中的onClick()方法。
Toast的使用方法爲:通過靜態方法makeText()創建一個Toast對象,再調用show函數顯示。makeText需要三個參數:
1、上下文(由於活動就是一個上下文對象,所以傳入活動本身即可)
2、顯示的文本內容
3、顯示的時間(Toast.LENGTH_SHORT和Toast.LENGTH_LONG兩個內置常量可用)
在活動中使用Menu
同樣邏輯和設計分離,菜單需要寫菜單的佈局文件,然後在活動中重寫onCreateOptionsMenu()方法。通過getMenuInflate方法獲得MenuInflater對象,再調用它的inflate方法爲當前活動創建菜單。Inflate方法有兩個參數,第一個指定用哪個資源文件創建菜單,第二個指定菜單添加到哪個menu對象中。最後返回true就能顯示菜單,返回false就不顯示菜單。
@Override public boolean onCreateOptionsMenu(Menu menu){ getMenuInflater().inflate(R.menu.main,menu); return true; }
在活動中重寫onOptionsItemSelected()方法來定義菜單項響應事件。
@Override public boolean onOptionsItemSelected(MenuItem item){ switch(item.getItemId()){ case R.id.add_item: Toast.makeText(this,"You clicked Add",Toast.LENGTH_SHORT).show(); break; case R.id.remove_item: Toast.makeText(this,"You clicked Remove",Toast.LENGTH_SHORT).show(); break; default: } return true; }
銷燬活動
使用finish()函數就可以銷燬當前的活動,效果與點擊手機的返回鍵相同。