標籤: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:minSdkVersion和android: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" 的配置, 系統會運算相應的大小。
完成後的效果: