第二章:介面和目錄結構

自助者天助發表於2014-11-25

Eclipse和Android虛擬裝置管理器概覽

Eclipse正常編碼介面和除錯介面是不相同的,分別如圖:

 

 

android虛擬裝置如圖:

android專案結構概覽

 直接上圖:

 更詳細的關於res的介紹:

 

 我會一個一個介紹專案中的目錄。首先是src

  1. src/資料夾——原始碼目錄 平時我們寫程式,建包建類都是在這裡進行,這裡存放著專案的所有精華和程式設計師的一切心血。
  2. gen/資料夾——系統自動生成程式碼目錄 既然是系統自動生成的,所以我們大可不必管它。順便提一下專案的重建,讓系統程式碼重新自動生成——選中專案,再到eclipse的選單欄,project->clean..
  3. 3個Android包——開發時提供的jar包存放目錄 第一個是Android版本自帶的jar包,系統核心內容。第二個同樣是SDK更新後出現的,裡面存放你要用到的jar包,包括你匯入進去的jar包。第三個存放的appcompat的jar包,版本支援用。可能你從lib匯入新的jar包後會出現新的以Android開頭的目錄,放心,這些都是無害的~~ 順便提一句怎麼新增新的jar包——找到專案工程檔案目錄,進去之後新建一個libs的資料夾,將要匯入的jar包放進去。回到eclipse,(記得先將專案重新整理一遍)對著專案右鍵->Propreties->Java Bulid Path->Libraries->右側的Add JARs->找到自己專案下的libs資料夾,選中要匯入的jar包,完成就行了。
  4. assets/資料夾——資源目錄 存放系統所要的資源,可以在裡面任意的構建目錄,但該目錄下的資原始檔不會再R.java自動生成ID。這些都是與res/資料夾的不同。 存放的資源命名請用小寫開頭,不然系統不會識別。
  5. bin/資料夾——同樣是系統自動生成 build之後裡面會生成APK檔案,可以直接拿出來用
  6. libs/資料夾——存放自己所需的jar包
  7. res/資料夾——存放圖片、佈局、字串等資源 裡面的資源會在R.java中自動生成ID(需要在project->Build Automatically前打上勾)    (1)res/drawable-*dpi/  ——系統會根據解析度來提取不同drawable資料夾裡的圖示。依次從h-m-l代表解析度從高到低。當然只放一張在其中一個資料夾中系統也是可以讀取的。    (2)res/layout資料夾 ——存放佈局檔案    (3)res/menu資料夾——存放選單資原始檔。選單資原始檔使用<menu>標籤作為根節點。除了<menu>外,還有另外兩個標籤用於設定選單項和分組,這兩個標籤是<item>和<group>。    (4)res/values資料夾——存放資料資原始檔。可以存放不同型別的資料。比如arrays.xml、colors.xml、dimens.xml、styles.xml等等。根據版本的不同,也設定了不同的資料夾。
  8. AndroidManifest.xml——系統配置檔案 專案的總配置檔案,記錄應用中所使用的各種元件。這個檔案列出了應用程式所提供的功能,在這個檔案中,你可以指定應用程式使用到的服務(如電話服務、互聯 網 服務、簡訊服務、GPS服務等等)。另外當你新新增一個Activity的時候,也需要在這個檔案中進行相應配置,只有配置好後,才能呼叫此 Activity。AndroidManifest.xml將包含如下設定:application permissions、Activities、intent filters等。
  9. project.properties ——環境檔案 記錄專案中所需要的環境資訊,比如Android的版本等。
  10. 其他 ic_launcher-web.png:這個是為了google Play市場使用展示的圖示,它需要的是512×512的高解析度的圖示。 proguard-project.txt project.properties 這兩個檔案是為了保護Android專案而做的程式碼混淆使用的。

 

Android 專案檔案的具體講解:

     首先看這個 HelloWorld 類。

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

他繼承了 Activity ,前面講了,一個 Activity 可以想象成一個手機的螢幕,用於展示一屏的內容,所以所有要展示內容的螢幕都要繼承 Activity 才能實現,接著覆蓋了 onCreate() 方法對該 Activity 進行初始化 setContentView(R.layout. main ); 設定了使用 main.xml 這個佈局檔案作為當前 Activity 的內容展示 .main.xml 就是放在 res 下, layout 下面的檔案 xml 佈局檔案 , 我們可以直接使用 R.layout.main 進行直接的引用他,這也是 Android 亮點的地方,省得我們為了引用一個 xml 檔案再使用 File 類去讀取,我們要做的只是把這個 xml 檔案的索引給 Android ,他會自動的幫我們找到它並使用 .

 2. main.xml 佈局檔案

Xml程式碼  
 
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello"
    />
</LinearLayout>

佈局檔案的內容不多 , 開始就是一個 LinearLayout 元件的定義,然後在這個 LinearLayout 放了一個用於顯示文字的 TextView 。現在來看一下幾個引數 :

  • .      LinearLayout 一個線性佈局皮膚,只能垂直和水平佈局, android:orientation="vertical" 代表裡面的子元素只能垂直排列,而使用 android:orientation="horizontal" 就標識裡面的子元素水平排列 ..
  • .      android:layout_width 定義當前檢視佔的寬度,這裡是 fill_parent 即為充滿整個螢幕。而設定成 wrap_content 會根據當前檢視的大小隻能的改變寬度
  • .      android:layout_height 是定義檢視的高度,這裡也是填充整個螢幕。而設定成 wrap_content 會根據當前檢視的大小隻能的改變高度。
  • .      android:text 是這是 TextView 要顯示的文字,可以是字串,也可以是一個字串的引用,這裡是一個引用,引用的是 strings.xml 定義好的名字為 hello 的字串

3.      string.xml 介紹。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, HelloWorld!</string>
    <string name="app_name">HelloWorld</string>
</resources>

這裡我們看看就明白了,只要是定義一個個的 K-V 的鍵值對,供其他地方使用。比如上面的 main 中對 hello 的引用。這對字元的統一管理和國際化有很大的意義。

4.      AndroidManifest.xml 的介紹

Xml程式碼  
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.flysnow"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".HelloWorld"
                  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>
    <uses-sdk android:minSdkVersion="8" />

</manifest>

這是專案的重要配置檔案,諸如 Activity ,許可權, Intent 等都在這裡配置

Package: 定義了該應用的包。

android:versioCode 定義了應用的版本號

android:versionName 定義了應用的版本名字

application 標籤定義了一個應用,一個專案最多有一個 Application 標籤。

android:icon="@drawable/icon" 定義了應用的圖示 引用資原始檔中的 icon 圖片

android:label="@string/app_name" 定義了應用的名稱

activity 標籤定義了一個 Activity ,你的每一個 Activity 必須在這裡定義,否則不能執行 .

Android:name 定義了 Activity 的類名 , 這裡的 .HelloWorld 是以上面的 Package 定義為基礎的,也就是 Package(com.flysnow) 加上這個 android:name(.HelloWorld) 要能定位到這個 Activity(com.flysnow.HelloWorld) ,否則就是找不到 .

android:label 定義了該 Activity 的標題

intent-filter 定義一個 Intent 過濾器,用於標記對應的 Activity ,以便 Android 系統能找到該 Activity ,定義的是隱性的 Intent ,主要使用兩個子標籤 action 和 category 來區分每個 Intent 。

最後的 <uses-sdk android:minSdkVersion="8" /> 就是定義應用的最低 SDK 的級別,前面講過,,,想看的可以參見

 

相關文章