在這次的文章中,將會(huì )介紹Android程序的目錄結構以及UI知識,為下一篇實(shí)際例子的編寫(xiě)打下基礎。由于文章篇幅有限,所以本著(zhù)先淺后深的思路,從簡(jiǎn)單介紹入手,然后在往后實(shí)際例子編寫(xiě)中再深入擴展學(xué)習各個(gè)知識點(diǎn),希望使學(xué)習曲線(xiàn)更加平滑。
正如和我們編寫(xiě)網(wǎng)頁(yè)項目時(shí)一樣,通常會(huì )建立html、css、js等目錄區分不同內容,Android程序也有其固定的目錄結構。和Html與Css的關(guān)系一樣,Android也是通過(guò)一系列屬性控制視圖元素的視覺(jué)呈現。對于這個(gè)概念,各位前端小伙伴應該非常容易理解。那它們之間有什么區別呢?事不宜遲,讓我們趕快進(jìn)入這次學(xué)習,Let’s Go!
一,Android程序的目錄結構

打開(kāi)我們上次創(chuàng )建的HelloWorld項目,會(huì )看到一個(gè)目錄結構,這就是Android的程序目錄,這些目錄的大致作用如下:
src:源碼的組織管理目錄。
gen:自動(dòng)生成的目錄,會(huì )生成一些重要的文件,如R.java,該目錄一般不需要我們編寫(xiě)。
assets:該目錄文件不會(huì )被編譯成二進(jìn)制編碼,多用于放音視頻,文本等原始格式文件。
bin:用于存放編譯后的Java文件及apk文件。
libs:存放Android的源碼包或需要引入的源碼包。
res:程序資源的所在目錄,包括圖片,數值等各類(lèi)資源。
AndroidManifest.xml:程序配置文件,它向系統描述了程序的信息。
這里先介紹我們常用到的目錄:
1)src目錄

打開(kāi)項目的src目錄,會(huì )立即明白,原來(lái) com.tencent.helloworld 的”.”號相當于路徑分隔符,Java就是通過(guò)此方式管理存放不同文件,也就是Java的包機制,現在只需知道此概念即可。
2)res目錄

該目錄用于存放Android程序的各類(lèi)資源,非常重要,用于管理資源和Android UI的適配,在后面的例子中將會(huì )逐步使用到。其中主要包含下列目錄:
drawable-xxx
用于存放位圖(Bitmap files)(.png,.9.png,.jpg,.gif)或者狀態(tài)列表(State lists),動(dòng)畫(huà)(Animation drawables),圖形(Shapes)等繪制性資源的xml文件。相當于網(wǎng)頁(yè)中的圖片資源。其中-xxx用于適配不同像素密度的屏幕。這里先不作展開(kāi)。
layout
該目錄的xml文件用于描述一個(gè)Android UI界面(Activity)或一個(gè)系統桌面組件(AppWidget)的界面結構。相當于網(wǎng)頁(yè)的Html結構。
menu
該目錄下的main.xml文件用于定義Android底部的彈出菜單結構。
values-xxx
用于存放定義各種:字符值,顏色值,數值,樣式等的xml文件,例如dimens.xml用于定義各尺寸值,strings.xml用于定義文字,colors.xml用于定義各顏色值,其中最為最重要的styles.xml用于定義View元素的視覺(jué)樣式(相當與網(wǎng)頁(yè)的Css)。-xxx作用也是用于A(yíng)ndroid的適配,這里也先不作展開(kāi)。
AndroidManifest.xml文件
每個(gè)Android應用程序都有一個(gè)AndroidManifest.xml文件在根目錄,該文件用于向系統提供一些程序運行前需要提供的信息。該文件主要包含以下信息:
1.命名該應用的Java包名,包名將作為應用的唯一標識。
2.描述應用的構成,包括Activity,Services等。
3.聲明應用所必須具備的權限,用以訪(fǎng)問(wèn)受保護部分的API。
4.聲明應用運行時(shí)需要的環(huán)境配置信息。
5.聲明應用所需的系統Android API的最低版本級別。
6.列舉應用所需要鏈接的庫。
二,Android的UI簡(jiǎn)介
從Html角度出發(fā),一個(gè)網(wǎng)頁(yè)界面,通常由Div元素完成結構布局,Img,Input,Button等元素完成界面構建。Android的界面構建思想也如此,在A(yíng)ndroid的UI世界中,所有UI元素均由View類(lèi)繼承而來(lái),然后衍生出用于布局的元素如:FrameLayout,LinearLayout,RelativeLayout,TableLayout等,用于界面呈現的組件元素如:TextView,EditText,ImageView,VideoView等。只是View元素及其子元素有嚴格的繼承體系,這點(diǎn)和Html不同。下圖展示了Android中的View元素體系:

和Css控制Html的視覺(jué)呈現一樣,Android也是通過(guò)各屬性控制View元素的視覺(jué)呈現,我們先來(lái)看看熟悉的Html和Css關(guān)系:

聰明的小伙伴一定會(huì )問(wèn),Css中的屬性只有平級關(guān)系,為什么會(huì )區分開(kāi)呢?沒(méi)錯,上圖簡(jiǎn)單模擬了Android中“Css”的層級關(guān)系。在A(yíng)ndroid中,各屬性是有嚴格區分和有其自身的繼承體系。
所以這里有一個(gè)很重要的概念:在A(yíng)ndroid中,是由兩類(lèi)屬性控制View類(lèi)的視覺(jué)呈現。一類(lèi)是Viwe類(lèi)自身的屬性,如背景、透明度、內空白等;一類(lèi)是布局屬性、如長(cháng)度、寬度,邊距、位置等。下圖展示了它們之間的關(guān)系:

在這里我們需要明白3個(gè)概念:
1,View類(lèi)的自身屬性,是可以繼承的,例如Android中,View類(lèi)有id、alpha、padding等屬性,而TextView繼承自View,所以TextView除了可以設置自身的屬性textColor外,還可以設置id,alpha等。所以我們可以這樣設置一個(gè)TextView的呈現:

2,處在什么布局元素內,該布局元素內的視圖就可以使用什么布局屬性。例如TextView若處在LinearLayout內,則可以使用LinearLayout.LayoutParams定義的布局屬性,如:

3,布局屬性也是可以繼承使用的,例如LinearLayout.LayoutParams繼承自ViewGroup.MarginLayoutParams,ViewGroup.MarginLayoutParams則繼承自ViewGroup.LayoutParams,最終可以像如下設置:

所以,通常在一個(gè)的界面中,布局屬性的使用就像下圖所示一樣:

結束:
在這次的文章中,簡(jiǎn)要介紹了一下程序目錄。也對Android UI的概念作了總體介紹,理清UI屬性的關(guān)系,對我們后面的編程,特別是用程序代碼生成視圖和設置屬性都尤為重要。在下一篇文章中,我們將實(shí)際完成一個(gè)界面的制作,并借例子深入到Android UI的知識點(diǎn)中。希望這次的文章能給小伙伴們在A(yíng)ndroid學(xué)習之路上帶來(lái)幫助。
聯(lián)系客服