版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、詳見:運(yùn)用 Android SDK 進(jìn)行 UI 開發(fā)時(shí),雖然也可以使用純代碼來完成,但是那 種方法對(duì)我這種剛學(xué)習(xí) Android 對(duì) API 還不懂的人來說,能進(jìn)行類似 VB 、MFC 一樣圖形化開發(fā)自然是最合適不過的。幸好 Android 也提供了這種方式,在 Android 工程文件中專門有個(gè) res 目錄用于存放資源,該目錄下的資源可以進(jìn)行 可視化的編輯,編寫好的資源通過 AAPT (Android AssetPackaging Too)l 工具自 動(dòng)生成 gen目錄下的 R.java 資源索引文件,之后在 Java代碼和 XML 資源文件中 就可以利用索引來調(diào)用資源了。Android
2、提供了如此便利的資源架構(gòu),要想使用它,還是要對(duì)他有深入的了 解才可以, 以下就這陣子對(duì) Android 資源的學(xué)習(xí)進(jìn)行小結(jié)來回顧和整理幾個(gè)問題Android 資源目錄結(jié)構(gòu)問題?Android 資源支持哪些類型資源,他們具體的語法和使用規(guī)則?Android 資源目錄結(jié)構(gòu)Android 資源除了 assets目錄是與 res同級(jí)外, 其它資源均被放在 res/目錄下 面,該目錄下面的資源文件夾并不是隨意命名的, 需要遵循嚴(yán)格的規(guī)范, 否則編 譯生成 R.java過程中會(huì)報(bào)類似“ invalidresource directory name *”的錯(cuò)誤提示, 并且導(dǎo)致 R.java 自動(dòng)生成失敗。常
3、用的缺省目錄和對(duì)應(yīng)資源類型在 SDK 幫助中有表格列出, 簡(jiǎn)單摘抄如下:資源文件夾內(nèi)文件夾命名規(guī)則上面 說 過 res 文 件夾下的 文件夾命 名 是 有規(guī)矩 的,否則 會(huì)報(bào)類似 “ invalidresource directory name *”的錯(cuò)誤提示,除了上表提供的缺省文件夾, 一般可以用缺省文件夾名加短橫線加配置相關(guān)的限定符構(gòu)成需要的資源文件夾, 用于區(qū)別不同屏幕分辨率、 不同機(jī)型特點(diǎn) (是否帶鍵盤等) 以及不同的本地化資 源等用處,詳細(xì)參考 API 說明文檔。具體案例如下圖所示其中的 values-zh-rCN 就是中文簡(jiǎn)體資源包,用于本地化,至于其它就對(duì)照 API 說明文檔來分
4、析。一般項(xiàng)目缺省的資源文件夾名稱就夠了。資源文件夾內(nèi)的資源文件存放規(guī)則 由上面資源表可知, 每個(gè)文件夾中存放的文件類型不僅有規(guī)定, 而且對(duì)文件 內(nèi)容也是有嚴(yán)格要求的,曾經(jīng)將一個(gè)定義布局的 spinner.xml 文件放置在 res/values,結(jié)果就報(bào)“ Invalid start tag *Layout spinner.xml ”錯(cuò)誤,并導(dǎo)致 R.java 沒有生成; 將該布局文件放置在 res/color 下面,雖然沒有報(bào)錯(cuò), 但是原本的布局 文件,不再是正確生成為形如“ R.layout.spinner”的布局資源,而是生成為了 “R.color.spinner”的顏色資源索引,具體如
5、下所示:布局文件放置正確的 R.java 中代碼public static final class layout public static final int autocomplete=0x7f030000;public static final int spinner=0x7f03000d;布局文件放置錯(cuò)誤的 R.java 中代碼public static final class color public static final int solid_blue=0x7f050001;public static final int spinner=0x7f050004;另外當(dāng)一種資源定義 X
6、ML 文件放在不對(duì)應(yīng)的 res 文件夾下,在可視化環(huán)境 下,也就不能正確顯示和編輯。通過上述一些特性,我們可以猜測(cè)出 android 的 aapt 工具的工作原理,先是 根據(jù)文件夾名來進(jìn)行對(duì)資源文件和 XML 文件進(jìn)行不同的解析和編譯規(guī)則進(jìn)行解 析和編譯, ADT 工具也是根據(jù)具體文件夾名稱調(diào)用不同的規(guī)則來可視化編輯和 呈現(xiàn)。使用 eclipse IDE 提供的框架來創(chuàng)建資源由于 Android 資源文件和文件夾有那么多的規(guī)矩,所以新手還是建議用 eclipseIDE 提供的創(chuàng)建 XML 文件的框架來創(chuàng)建資源文件和資源文件夾即在你需 要?jiǎng)?chuàng)建資源文件時(shí),通過“ File”“New”“Androi
7、d XML file ”就可以彈出如下的 New Android XML File 對(duì)話框,選好工程,填好資源文件名, 在“ What type of resourcewould you like to create” 中勾選需要?jiǎng)?chuàng)建的資源類型,假如是非缺省目錄資源就在“ what type of resource configuration would you like? ”添加需要的配置類型,就可以在“ Folder”中自動(dòng) 生成資源 xml 所在的文件夾, 這個(gè)不用修改它。 其它就根據(jù)需要來選擇, 然后點(diǎn) 擊“ Finish”,就可以創(chuàng)建出符合規(guī)則的資源文件了。 在這里需要注意的是資源文
8、 件名不能使用大寫字母。是不是很省事,又能做出正確的事情啊,呵呵!Android 資源類型及其簡(jiǎn)單使用上面對(duì) Android 的資源目錄的分析中,已經(jīng)大致展現(xiàn)了 Android 資源類型的 大致脈絡(luò),下面從簡(jiǎn)單資源先入手詳細(xì)羅列下具體的資源類型和使用。 一般而言, 沒有明說資源不能在 XML 資源文件中調(diào)用,那么該資源都是既可以在其它 XML 資源文件中調(diào)用又可以在 Java 代碼中調(diào)用的。字符串常量資源( string )字符串資源位于 /res/values目錄下, 一般定義為 /res/values/strings.xml文件中 (文件名隨意,但是目錄是固定的) ,主要定義的是應(yīng)用程序需
9、要用到的字串資 源,這和 Symbian 的字串資源規(guī)劃類似,不過更加進(jìn)步了些。當(dāng)然,你非要在代 碼中使用字串也可以, 但那種方式并不是推薦的。 字串資源有 String、String Array 和 Quantity Strings (Plurals)三類,其各自語法和用例稍微有些區(qū)別String 語法text_string上面的 string_name 字符串資源,可以通過如下兩種方法調(diào)用XML 資源定義中:package:string/string_nameJava代碼中:R.string.string_nameString 用例:假設(shè)有個(gè)資源文件為 res/values/strings
10、.xml,其內(nèi)容如下 :Hello!那么這個(gè) hello 字串資源在其它 XML 資源文件中的調(diào)用如下所示在 java 代碼中的調(diào)用如下String string = getString(R.string.hello);String Array 的語法text_string上面的 string_array_name字符串資源,可以通過如下兩種方法調(diào)用XML 資源定義中package:array/string_array_nameJava代碼中R.array.string_array_nameString Array 用例:假設(shè)有個(gè) String Array 資源在 /res/values/st
11、ringArray.xml 中,內(nèi)容如下MercuryVenusEarthMars那么在其它資源 XML 文件中,假設(shè)有個(gè)下拉列表需要用到上面的字符串?dāng)?shù) 組資源,則可以如下調(diào)用在 Java 代碼中的調(diào)用示例如下Resources res = getResources();String planets = res.getStringArray(R.array.planets_array);Quantity Strings 語法text_string幫助文檔中沒有給出 XML 資源文件中對(duì)其的使用方法,也沒有明確說不能 通過 XML 調(diào)用,我也沒有搞明白這個(gè)資源, 所以暫時(shí)只給出 Java 代碼中
12、對(duì)上述 plural_name資源的調(diào)用情況R.plurals.plural_name其中關(guān)于 zero、one、two、few 和 many 在幫助文檔中有詳細(xì)的釋義,這里 就不單獨(dú)羅列。Quantity Strings 用例假設(shè)有個(gè) Quantity Strings 資源定義在 /res/values/stringQuantity.xml 中,內(nèi)容 如下One song found.%d songs found. 由于這個(gè)資源,我還不太會(huì)用,所以只好照抄幫助文檔的使用,至于 XML 文檔中如何使用還不會(huì),在 Java 代碼中使用如下所示int count = getNumberOfsong
13、sAvailable();Resources res = getResources();String songsFound = res.getQuantityString(R.plurals.numberOfSongsAvailable, count, count);整數(shù)常量資源( Integers) 整數(shù)常量在 C/C+通常是放在代碼里面, android 將整型常量、 Bool 常量和 數(shù)組常量等等都可以放到 XML 資源文件中,后面具體介紹這些資源時(shí)就不再做 展開了。一般整數(shù)常量被放置在 /res/values/integers.xml中,同樣文件名可以隨意, 但是目錄必須固定在 /re
14、s/values/下。Integer 語法integer 上面的 integer_name整數(shù)常量,可以通過如下兩種方法調(diào)用 XML 資源定義中package:integer/integer_nameJava代碼中 R.eger_nameInteger 用例 假設(shè)整數(shù)常量放置在 /res/values/integers.xml中,內(nèi)容如下 755 我們?cè)诖a中使用的時(shí)候,通過以下方式進(jìn)行調(diào)用 Resources res = getResources();int maxSpeed = res.getInteger(R.integer.max_spee;d )Integer
15、Array 語法 integer上面定義的 integer_array_name可以用如下兩種方法調(diào)用 XML 資源定義中package:eger_array_nameJava 代碼中 R.eger_array_nameInteger Array 用例假設(shè)整數(shù)數(shù)組放置在 /res/values/intergers.xml中,內(nèi)容如下所示 481632該資源在 java 代碼中的調(diào)用為Resources res = getResources();int bits =res.getIntArray(R.array.bits);Typed Array 常量資源Ty
16、ped Array 資源有點(diǎn)類似于 Symbian 中瘦模板類的,用于存放多種不同類 型資源數(shù)組的資源, 本來想將這個(gè)資源放后面講解, 但是前面提供了一系列數(shù)組 案例,就一并將這個(gè)數(shù)組也提前羅列下吧。該資源一般放置于 /res/values/arrays.xml中Typed Array 語法resource上面的 typed_array_name資源,可以通過如下兩種方法調(diào)用XML 資源定義中package:array/typed_array_nameJava代碼中R.array.array_nameTyped Array 用例假設(shè)有兩個(gè) Typed Array 資源定義在 /res/valu
17、es/arrays.xml中,具體如下drawable/homedrawable/settingsdrawable/logout#FFFF0000#FF00FF00#FF0000FF該資源通過以下方法在 java 代碼中調(diào)用Resources res = getResources();TypedArray icons = res.obtainTypedArray(R.array.icons);Drawable drawable = icons.getDrawable(0);TypedArray colors = res.obtainTypedArray(R.array.icons);int c
18、olor = colors.getColor(0,0);由于每一種類型都是通過不同的 API 來獲取數(shù)組中的元素,比如上面用例 里面 color 用 int getColor(int index, intdefValue)函數(shù), Drawable 用 Drawable getDrawable(int index) 函數(shù),至于其它相關(guān)的類型該調(diào)用什么函數(shù)來獲取具體可 以 參 看 android.content.res.TypedArray 的 源 碼 文 件 frameworksbasecorejavaandroidcontentresTypedArray.java來 獲 得 更 多 的 詳 情
19、。布爾常量資源( bool )該資源一般定義在 /res/values/bools.xml 中。bool 語法true| false上面的 bool_name布爾常量資源,可以通過如下兩種方法調(diào)用XML 資源定義中package:bool/bool_nameJava代碼中R.bool.bool_namebool 資源用例假設(shè)有 bool 常量資源定義在 res/values/bools.xml中,內(nèi)容如下truetrue那么在 xml 資源中的調(diào)用可以如下在 Java 代碼中的調(diào)用如下Resources res = getResources();boolean screenIsSmall =
20、res.getBoolean(R.bool.screen_small);Dimension 常量資源 該資源定義跟屏幕顯示相關(guān)的一些尺寸常量,一般保存在 /res/values/dimen.xml文件中具體的度量單位有:px(象素 ): 屏幕實(shí)際的象素,常說的分辨率 1024*768pixels,就是橫向 1024px, 縱向 768px,不同設(shè)備顯示效果相同。in(英寸 ): 屏幕的物理尺寸 , 每英寸等于 2.54厘米。mm(毫米 ): 屏幕的物理尺寸。pt(點(diǎn)): 屏幕的物理尺寸。 1/72 英寸。dp/dip: 與密度無關(guān)的象素,一種基于屏幕密度的抽象單位。在每英寸 160 點(diǎn)的顯示器
21、上, 1dp =1px。但 dp 和 px 的比例會(huì)隨著屏幕密度的變化而改變,不 同設(shè)備有不同的顯示效果。sp: 與刻度無關(guān)的象素,主要用于字體顯示 best for textsize,作為和文字相 關(guān)大小單位。dimension資源定義語法dimensiondimension資源用例假設(shè)定義了一個(gè) dimen 資源在 res/values/dimens.xml文件中25dp150dp30dp16sp我們可以在 XML 資源中進(jìn)行如下調(diào)用在 Java 代碼中進(jìn)行如下調(diào)用Resources res = getResources();float fontSize = res.getDimensio
22、n(R.dimen.font_size);顏色常量資源( color )顏色常量通常被定義在 /res/values/colors.xml 文件內(nèi),同時(shí)顏色資源作為一種 可繪制的資源,也可以被定義在 /res/drawable/文件夾下,調(diào)用方式也完全不同, 在這里只介紹作為常量的顏色資源。 雖然兩種定義和調(diào)用方式不同, 但是顏色的 數(shù)值表現(xiàn)形式卻是一樣的, 都是形如下面的十六進(jìn)制格式 (后面涉及顏色數(shù)值就 不再贅述了)#RGB#ARGB#RRGGBB#AARRGGBB比如#f00表示不透明的 12位紅色,而 #80ff0000表示透明的 32位真彩紅色 顏色常量語法hex_color上面的
23、color_name 顏色常量可以通過如下兩種方法調(diào)用XML 資源定義中package:color/color_namJava 代碼中R.color.color_name顏色常量用例假設(shè)有顏色常量被定義在 res/values/colors.xml中#f00#80ff0000在 XML 要使用該常量資源,可以通過如下方法在 Java 代碼中如果想使用該資源,則如下調(diào)用Resources res = getResources();int color = res.getColor(R.color.opaque_red);至此我們將 res/values下面定義的資源類型除了風(fēng)格 (Style)和主
24、題(Theme) 資源外,全部都介紹過了,由于風(fēng)格和主題案例需要設(shè)計(jì)布局( layout)和 View 等,所以最后再涉及這兩類資源的介紹。狀態(tài)顏色列表資源( color state list )該資源被放置于 /res/color/目錄下面,用來定義一個(gè)類似 Button 控件在不同 狀態(tài)下需要呈現(xiàn)不同的顏色。因此這種 XML 資源文件描述的是跟控件狀態(tài)相掛 鉤的顏色狀態(tài),具體見下面語法狀態(tài)顏色列表資源語法假如有個(gè)狀態(tài)顏色列表資源文件 res/color/colorstatefile.xml 該菜單資源可以通過如下渠道訪問 XML 資源定義中 package:color/ colorstat
25、efile Java 代碼中 R.color. colorstatefile 狀態(tài)顏色列表資源用例 有一個(gè)定義了 button 狀態(tài)顏色列表的資源 res/color/button_text.xml selectorxmlns:android= 則在布局文件中一個(gè) Button 控件需要使用該狀態(tài)顏色,就可以通過如下調(diào) 用布局資源( Layout )布局資源是放置于 /res/layout/下面的用于定義 UI 界面的 XML 文件, 該資源 被用于 Activity 或者其他 UI 組件。由于我在學(xué)習(xí) android 之前,沒有過 Java GUI 開發(fā)的經(jīng)驗(yàn),所以不清楚 Java里面的 UI設(shè)計(jì)思想,只知道 Android UI類都是基 于 View 和 ViewGrou
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 專業(yè)洗車工2024年服務(wù)協(xié)議樣本版B版
- 夏至節(jié)氣文化探討模板
- 二零二五年度虛擬現(xiàn)實(shí)(VR)應(yīng)用開發(fā)框架合作協(xié)議3篇
- 2025年度健康養(yǎng)生產(chǎn)品全國代理合同范本4篇
- 2025年度工程車輛柴油補(bǔ)給服務(wù)協(xié)議4篇
- 個(gè)人借款企業(yè)合作合同書樣本版B版
- 《XX創(chuàng)意廣告欣賞》課件
- 專業(yè)足球教練2024聘任協(xié)議精簡(jiǎn)文本版A版
- 2025年度高新技術(shù)企業(yè)研發(fā)場(chǎng)地租賃協(xié)議書4篇
- 2024育兒嫂安全保障合同范本:育兒嫂職責(zé)與權(quán)益3篇
- MOOC 電工學(xué)(電氣工程學(xué)概論)-天津大學(xué) 中國大學(xué)慕課答案
- 2019級(jí)水電站動(dòng)力設(shè)備專業(yè)三年制人才培養(yǎng)方案
- 室內(nèi)裝飾裝修施工組織設(shè)計(jì)方案
- 洗浴中心活動(dòng)方案
- 送電線路工程施工流程及組織措施
- 肝素誘導(dǎo)的血小板減少癥培訓(xùn)課件
- 韓國文化特征課件
- 抖音認(rèn)證承諾函
- 清潔劑知識(shí)培訓(xùn)課件
- 新技術(shù)知識(shí)及軍事應(yīng)用教案
- 高等數(shù)學(xué)(第二版)
評(píng)論
0/150
提交評(píng)論