[Android系列—] 2. Android 項目目錄結構與使用者介面的建立

來源:互聯網
上載者:User

標籤:des   android   c   style   class   blog   

前言

在 [Android系列—] 1. Android 開發環境搭建與Hello World 這一篇中介紹了如何快速搭建Android開發環境, 並成功了建立一個沒有任何代碼更改的 Android 應用程式。

接下來, 就得看看

1. 使用 Eclipse  建立的APP 有哪些目錄和檔案

2. 如何建立一個比Hello World 進階的一個使用者介面



appcompat_v7

在建立 MyFirstApp 的 Android 項目時, 會發現在項目路徑下多出了一個 appcompat_v7 的項目。

而且這個項目不能刪除,刪除之後, 建立的項目也會出錯。

appcompat_v7 是Google 的一個相容包,就是一個支援庫,它可以讓2.1 以上全使用上4.0 版本的介面。


如何去除?

如果在建立項目是把最小SDK 選在Andorid4.0 以上就不需要這個支援庫了。


所以,暫時且不去管這個,在那就讓它在那。


目錄結構



1. src

存放開發的app java 原始碼檔案。

預設狀況下, 包含一個 Activity 的類, app  運行時就會進到這個類。

2. gen

編譯器自動產生的一些java 代碼。

這個目錄中最關鍵的檔案就是R.java, 這個檔案是唯讀模式,不能更改。

R類中包含很多靜態類,請靜態類的名字都與res中的一個名字對應,就像是個資源字典大全。其中包含了使用者介面,映像,字串等對應各個資源的標識符,R類定義了該項目所有資源的索引。例如介面中有一個文本控制項,這個控制項就在布局檔案中有 id.id是android:id=”@+id/textview”,那麼通過R.id.textivew就可以找到這個控制項。

通過R.java可以很快的尋找到所需要的資源,同時編譯器也會檢查R.java列表中的資源是否被使用,沒被使用到的資源不會被編譯到軟體中,這樣可以減少在手機佔用的空間。

這個R.java預設有attr,drawable,layout,string 4個靜態內部類(Android 4.2有8個靜態類,多了個id,menu,style,dimen),每個類對應一種資源。例如我們在工程中添加一副圖片,那麼工程就會在此類的drawable內部類中添加一條資料,如果刪除了此圖片,工程則會自動刪除此條資料。由此可見,R.java類似於電腦的註冊表。


3. Android 4.4.2,

    Android Private Libraries

    Android Dependencies

這三個是庫。

需要特別說明的是Android Dependencies

該目錄出現在ADT16以後的版本中,是ADT第三方庫新的引用方式,當我們需要引用第三方庫的時候,只需要將   該庫拷貝到libs檔案夾中,ADT就會自動完成對該庫的引用(如本例中android-support-v4.jar)


4. assests
除了提供res目錄存放資源檔外,android在assets目錄也可也存放資源檔。Assets目錄下的資源檔不會再R.java自動產生id,所以讀取asset目錄下的檔案必須指定檔案的路徑,可以通過AssetManager類來訪問這些檔案


5. bin

該目錄是編譯之後的檔案以及一些中間檔案的存放目錄,ADT先將工程編譯成Android JAVA虛擬機器(Dalvik Virtual Machine)   檔案classes.dex. 最後將該classes.dex封裝成apk包。(apk就是android平台生的安裝程式包)。


6.  libs

該目錄用於存放第三方庫,(建立工程時,預設會產生該目錄,沒有的話手動建立即可)。


7. res

存放項目中的資源檔,該目錄中有資源添加時,R.java會自動記錄下來。res目錄下一般有如下幾個子目錄

 drawable-hdpi, drawable-mdpi, drawable-xhdpi:存放圖片檔案(png, jpg), 三個子目錄分別儲存高,中,低品質的圖片

 layout:螢幕布局目錄,layout目錄內預設布局檔案是activity_main.xml,可以在該檔案內放置不同的布局結構和控制項,來滿足項目介面的需要,也可以建立布局檔案。

 menu:存放定義了應用程式菜單資源的XML檔案。

 values, values-v11, values-v14:存放定義了多種類型資源的XML檔案。


8.  AndroidManifest.xml

資訊清單檔, 描述了應用程式的基本特徵和組成。

最重要的元素就是   <uses-sdk>, 這個定義了應用程式對不同版本的Android 的相容設定 android:minSdkVersionandroid:targetSdkVersion

類似:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" ... >    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="19" />    ...</manifest>
實際開發時: android:targetSdkVersion  這個值可能要經常被設定成目前的最新版本。


使用者介面

安卓應用的使用者介面是構建在 View 和 ViewGroup 的層級對象之上。

View 對象通常是類似 buttons 或者  text fields 這樣一些UI 組件;

ViewGroup 對象是不可見的View 容器, 用來定義子的 views 的布局, 像是一個grid 還是一個垂直列表。

可以在XML 中定義UI的層級結構:


建立一個使用者介面

開啟 res/layout/fragment_main.xml。

這個檔案的內容是:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.oscar999.myfirstapp.MainActivity$PlaceholderFragment" >    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/hello_world" /></RelativeLayout>

顯示 Hello World 應該就是這個地方配置的了。

接下來就介紹如何建立一個新的使用者介面

1. 建立一個線性布局

res/layout/fragment_main.xml


刪除TextView 元素;

把 RelativeLyaout 修改為LinearLayout, 並且添加android:orientation的屬性,值為 "horizontal"

修改後內容為:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="horizontal" ></LinearLayout>

LinearLayout 是一個視圖組(是ViewGroup的子類),通過android:orientation屬性配置, 把子視圖配置成水平或豎直的方向。

android:layout_width和android:layout_height 這兩個屬性是必須的, 用來指定大小。這裡因為LinerLayout 是布局根視圖,它需要填充這個螢幕地區, 所以設定成“match_parent”, 這個值使View 自動伸展以適應父視圖的大小。


2. 添加一個文字框(Text Field)

使用<EidtText>元素在LienarLayout 中添加一個可以輸入的文字框。

內容如下:

   <EditText android:id="@+id/edit_message"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:hint="@string/edit_message" />

android:id:

定義一個唯一的標識, 可以通過這個id在app代碼中使用這個 View.

@ -- 這個是必須的, 後面接id , 再後面就是資源名字(edit_message)

+ -- 加號僅僅在首次定義 resource ID時需要。


android:hint

輸入框的預設值。

@string/edit_message 這是引用一個已經定義的字串資源。


3. 添加字串資源

上面有用到字串資源(edit_message), 這個在什麼地方定義呢?

開啟: res/values/strings.xml, 會發現 Hello World  就定義在這個地方。

最最後加入兩行



4. 增加一個按鈕

和上面Text Field 類似, 添加一個button,

    <Button        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/button_send" />
儲存以上修改的xml 檔案, 重新運行 app


使輸入框填充整個螢幕寬度
從上面的顯示效果可以看到,按鈕的寬度還好,輸入框的寬度略小,如果能展開到整個螢幕就好了。

修改EditText 的配置如下:

layout_weight 配置的是一個權重值,用來配置各View 佔有的剩餘空間的比重。

如果有兩個 view , 一個的值是1, 一個的值是  2 的話,則一個佔有3/1 , 另一個佔有2/3.預設的值是 0 ,

android:layout_width="0dp" ,配置成0 , 是為了提升布局的效能, 因為 "wrap_content" 的配置, 系統會運算相應的大小。

完成後的效果:




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.