![Android應(yīng)用資源-提供資源(Providing Resources)_第1頁](http://file4.renrendoc.com/view/e4d43b8d02848e191d1f81893a6f9bec/e4d43b8d02848e191d1f81893a6f9bec1.gif)
![Android應(yīng)用資源-提供資源(Providing Resources)_第2頁](http://file4.renrendoc.com/view/e4d43b8d02848e191d1f81893a6f9bec/e4d43b8d02848e191d1f81893a6f9bec2.gif)
![Android應(yīng)用資源-提供資源(Providing Resources)_第3頁](http://file4.renrendoc.com/view/e4d43b8d02848e191d1f81893a6f9bec/e4d43b8d02848e191d1f81893a6f9bec3.gif)
![Android應(yīng)用資源-提供資源(Providing Resources)_第4頁](http://file4.renrendoc.com/view/e4d43b8d02848e191d1f81893a6f9bec/e4d43b8d02848e191d1f81893a6f9bec4.gif)
![Android應(yīng)用資源-提供資源(Providing Resources)_第5頁](http://file4.renrendoc.com/view/e4d43b8d02848e191d1f81893a6f9bec/e4d43b8d02848e191d1f81893a6f9bec5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
應(yīng)該始終把像圖片和字符串這樣的資源作為外部與代碼分離開,以便于能夠獨立的維護它們。還可以通過把資源組織到特殊命名的資源目錄中,給特殊的設(shè)備配置提供可選的資源。在運行時,Android系統(tǒng)會基于當前的配置選擇使用合適的資源。如,可以根據(jù)不同的屏幕尺寸提供不同UI布局,也可以根據(jù)系統(tǒng)的語言設(shè)置提供不同語言的字符串。把應(yīng)用程序資源作為外部資源分離后,可以使用項目中自動生成的R類中的資源ID來訪問對應(yīng)的資源。如何使用應(yīng)用程序中的資源會在“訪問資源”一節(jié)中詳細討論,本文檔主要討論如何把資源組織到應(yīng)用程序中,并且給特殊的設(shè)備配置提供可選的資源。按資源類型分組應(yīng)該把每種類型的資源分別放到工程的res/目錄的特定子目錄中。例如,以下是一個簡單的工程的文件組織結(jié)構(gòu):MyProject/src/MyActivity.javares/drawable/icon.pnglayout/main.xmlinfo.xmlvalues/strings.xml上例中res/目錄包含了所有的資源(在其子目錄中):一個圖片資源、兩個布局資源、以及一個字符串資源文件。資源目錄的名稱是中重要的,下表1中分別進行說明:目錄資源類型animator/存放定義屬性動畫的XML文件anim/存放定義補建動畫的XML文件(屬性動畫的XML文件也可以保存在這個目錄中,但是animator/目錄是給屬性動畫專用的,以區(qū)分這兩種不同的動畫類型。)color/存放定義顏色值的XML文件drawable/存放位圖文件(.png、.jpg、.gif、.9.png),或者是被編譯成以下可描畫資源類型的XML文件:位圖文件可變尺寸位圖(Nine-Patches)狀態(tài)圖片(stateslist)4?形狀5.動畫繪制
6.其他可繪制資源layout/存放定義用戶界面布局的XML文件menu/存放定義應(yīng)用程序菜單的XML文件,如選項菜單、上下文菜單、或子菜單raw/存放任意原生格式的文件。調(diào)用Resources.openRawResource()方法來打開這些資源。但是,如果需要訪問原始的文件名和目錄,就要考慮把它們保存到assets/目錄中(而不是res/raw/目錄)。assets/目錄中的文件沒有資源ID,因此只能使用AssetManager來讀取它們。values/存放包含簡單值的XML文件,如字符串、整數(shù)以及顏色等。在其他的res/子目錄中的XML資源文件都是基于XML文件名來定義一種資源,而在values/目錄中的文件則可以定義多種資源。這個目錄中每個文件中,母個<resources>兀素的子兀素都定義了一種資源。如,vstring>兀素就會創(chuàng)建R.string資源、vcolor>兀素就會創(chuàng)建R.color資源。因為每種資源都用它們自己的XML元素來定義,所以沒有文件名的限制,并且可以在一個文件中放入不同的資源類型。但是,為了清晰,可能想要在一個文件中只放一種資源類型,以下是要在這個目錄中創(chuàng)建的資源文件名的慣例:arrays.xml:針對資源數(shù)組(數(shù)組類型)colors.xml:針對顏色值dimens.xml:尺寸值strings.xml:字符串值styles.xml:樣式xml/放在這個目錄下的任意XML文件,都可以在運行時通過調(diào)用Resources.getXML()方法來讀取。各種XML配置文件必須保存在這兒,如可搜索配置等。警告:不要把資源文件直接保存在res/目錄中,這樣會導(dǎo)致編譯錯誤。保存在表1中定義的子目錄中資源是默認資源。也就是說,這些資源定義了應(yīng)用程序的默認設(shè)計和內(nèi)容。但是,不同類型的Android設(shè)備可以調(diào)用不同類型的資源。例如,如果一個設(shè)備的屏幕比普通的要大,那么就應(yīng)該提供不同的布局資源,以滿足額外的屏幕空間的需要?;蛘?,如果設(shè)備有不同語言設(shè)置,那么就應(yīng)該提供不同的字符串資源,以便在用戶界面上顯示與設(shè)備語言相匹配的文字。要給不同的設(shè)備配置提供這些不同的資源,除了默認的資源以外,還要提供可選的替代資源。提供可選的替代資源乎每個應(yīng)用程序都應(yīng)該提供可選的替代資源,來支持特殊的設(shè)備配置。例如,應(yīng)該針對不同的屏幕分辨率來包含可選的可描畫資源,并且為不同的語言環(huán)境提供可選的字符串資源。在運行時,Android系統(tǒng)會檢測當前設(shè)備配置,并給應(yīng)用程序加載合適的資源。以下是給特殊配置指定一組可選資源的步驟:1.用vresources_name>-vconfig_qualifier>的格式在res/目錄中創(chuàng)建一個新的目錄,vresources_name>是對應(yīng)的默認資源的目錄名(表1中定義的);vqualifier>是給使用這些資源的設(shè)備所指定的一個單獨配置的名字(表2中定義的)。每個名稱可以用短劃線來添加多個<qualifier〉警告:在添加多個限定符時,必須按照表2中列出的順序來放置它們。如果限定符的順序錯了,資源就會被忽略。在這個新的目錄中分別保存可選的替代資源。這些資源文件必須像默認資源文件一樣被準確的命名。例如,以下是默認和可選資源的定義:res/drawable/icon.pngbackground.pngdrawable-hdpi/icon.pngbackground.pnghdpi限定符指示這個目錄中資源是給高分辨率屏幕使用的。每個可描畫目錄中圖片都是為特定分辨率的屏幕準備的,但是它們的文件名是完全相同的。這樣用于引用icon.png和backgrounding圖片的資源ID就會相同,Android系統(tǒng)會通過設(shè)備配置信息和資源目錄名中的限定符的比較結(jié)果,來選擇跟當前設(shè)備匹配最好的資源版本。Android支持幾種配置限定符,并且可以在一個目錄名中通過用短劃線的分隔,來添加多個限定符。表2按照優(yōu)先的順序列出了有效的配置限定符,如果要在資源目錄中使用多個限定符,一定要按照表2列出的順序把它們添加到目錄名中。表2.配置限定符名稱配置限定符值說明MCC和MNC例如:mcc310mcc310-mnc004mcc208-mnc00等MCC是移動國家代碼的央文首字母縮與(Themobilecountrycode),它的后面可選擇性的跟隨來自設(shè)備內(nèi)的SIM卡的移動網(wǎng)絡(luò)代碼(MNC:mobilenetworkcode)。如在任何載體上,mcc310代表美國,mcc310-mnc004代表美國的Vfenizon公司,mcc208-mnc00代表法國的Orange公司。如果設(shè)備使用音頻連接(GSM電話),那么MCC和MNC的值來自SIM卡。也可以單獨使用MCC(例如,在應(yīng)用程序中包含特殊國家合法的資源)。如果僅需要指定語言環(huán)境,那么可以使用language和region限定符來替代(稍后討論)。如果決定要使用MCC和MNC限定符,就要仔細測試,使它能夠滿足你所期望的工作。還可以查看配置域mcc和mnc,它們分別指示了當前的移動國家代碼和移動網(wǎng)絡(luò)代碼。mcc:/reference/android/content/res/Configuration.html#mccmnc:httD:〃/reference/android/content/res/Configuration.html#mnc
語言和地區(qū)例如:enfren-rUSfr-rFRfr-rCA語言是用兩個字母的ISO639-1語言代碼定義的,緊跟其后的是可選的兩個ISO-3166-1-appha-2地區(qū)代碼字母(前面是小寫的“r”。這個編碼不區(qū)分大小寫,r前綴被用于區(qū)分地區(qū)部分,不能夠單獨指定地區(qū)。如果用戶改變了系統(tǒng)中的語言設(shè)置,那么在應(yīng)用程序的運行期間也能夠改變?yōu)閷?yīng)的語言。最小寬度swvN>dp例如:sw320dpsw600dpsw720dp等屏幕的基本尺寸,是指最短的可用屏幕區(qū)域。具體的說,設(shè)備的最小寬度是屏幕可用的寬度和高度中最短的那個(也可以把它看做是屏幕的最小可能的寬度)。這樣就可以使用這個限定符來確保應(yīng)用程序至少有<N>dp的寬度可用于UI界面,而不管屏幕的當前方向。例如,如果布局在任何時候都需要至少600dp的最小屏幕尺寸,那么就能夠使用這個限定符,在res/layout-sw600dp/目錄中創(chuàng)建布局資源。系統(tǒng)只會在可用屏幕的尺寸至少是600dp的時候才會使用這些資源,而不管600dp是否是被用戶認知的咼度或?qū)挾?。最小寬度是設(shè)備的固定屏幕尺寸特征,當屏幕的方向發(fā)生改變時,設(shè)備的最小寬度不改變。設(shè)備的最小寬度需要考慮屏幕的裝飾和系統(tǒng)UI的占用。例如,如果設(shè)備有一些固定的UI兀素要沿著最小寬度的軸向,占用一定的屏幕空間,那么系統(tǒng)聲明的最小寬度要比實際的屏幕尺寸要小,因為被系統(tǒng)占用的像素部分對用戶應(yīng)用程序的UI無效。因此,這個值應(yīng)該是應(yīng)用程序布局所需要的最小的實際尺寸(通常,這個值是布局支持的最小寬度,而不管屏幕的當前方向)。以下是可以使用的通用屏幕尺寸的一些值:1.320,針對以下屏幕配置的設(shè)備:240x3201dpi(QVGA手持設(shè)備)320x480mdpi(手持設(shè)備)480x800hdpi(高分辨率手持設(shè)備)2.480,針對480x800mdpi的屏幕(平板或手持設(shè)備)3.600,針對600x1024mdip的屏幕(7英寸平板)4.720,針對720x1280mdip的屏幕(10英寸平板)當應(yīng)用程序提供了多個帶有不同值的最小寬度限定符資源目錄時,系統(tǒng)會使用最接近(不超出)設(shè)備最小寬度的那個資源。這個限定符被添加在API級別13中。還要看android:requiresSmallestWidthDp屬性,它聲明了與你的應(yīng)用程序兼容的最小的最小寬度,并且smallestScreenWidthDp配置字段會持有這個設(shè)備最小寬度的值??捎脤挾葁<N>dp例如:w720dpwl024dp等指定最小的可用屏幕寬度,在資源中應(yīng)該以dp為單位來定義vN>的值。當方向在橫向和縱向之間改變時,這個配置值會跟當前的實際的寬度相匹配。當應(yīng)用程序給這個配置提供了多個不同值的資源目錄時,系統(tǒng)會使用最接近(不超過)設(shè)備當前屏幕寬度的那個配置。這個值需要考慮屏幕裝飾占據(jù)的空間,因此,如果設(shè)備在顯示的左邊或右邊有一些固定的UI兀素,那么使用的寬度值就要比實際的屏幕尺寸小,因為這些固定UI元素的占用,使得應(yīng)用程序的可用空間減少。
這個特性被添加在API級別13中還要看screenWidthDp配置字段,它持有當前的屏幕寬度。可用咼度hvN>dp例如:h720dphl024dp等指定最小的可用屏幕咼度,在資源中應(yīng)該以dp為單位來定義vN>的值,當方向在橫向和縱向直接改變時,這個配置值應(yīng)該跟當前的實際咼度匹配。當應(yīng)用程序給這個配置提供了不同值的多個資源目錄時,系統(tǒng)會使用最接近(不超過)設(shè)備當前屏幕高度的那個配置。這個要考慮屏幕裝飾的占用情況,因此,如果設(shè)備在顯示的上方或底部有一些固定的UI兀素,那么要使用的高度值要比實際的屏幕尺寸小,因為這些固定UI兀素的占用,使得應(yīng)用程序的可用空間減少。不固定的屏幕裝飾(如電話的狀態(tài)欄能夠在全屏?xí)r被隱藏)是不考慮的,像標題欄或操作欄這樣的窗口裝飾也不考慮,因此應(yīng)用必須準備處理比它們指定的空間要小的情況。這個限定符被添加在API級別13中。還要看screenHeightDp配置字段,它持有當前屏幕的咼度。屏幕尺寸smallnormallargexlargesmall:這種屏類似低分辨率的QVGA屏幕。對于小屏的最小布局尺寸大約是320x426dp。例如QVGA低分辨率和VGA高分辨率。normal:這種屏類似中等分辨率的HVGA屏幕。對于普通屏幕的最小布局尺寸大約是320x470dp。如,WQVGA低分辨率屏、HVGA中等分辨率屏、WVGA高分辨率屏。large:這種屏類似中等分辨率的VGA屏幕,對于大屏幕的最小布局尺寸大約是480x640dp。例如VGA和WVGA的中等分辨率屏。xlarge:這種屏被認為比傳統(tǒng)的中等分辨率的HVGA屏幕大。針對xlarge屏的最小布局尺寸大約是720x960dp。在大多數(shù)情況下,這種超大屏幕的設(shè)備因為太大而要放到背包中來攜帶,而且最有可能的是平板樣式的設(shè)備。注意:使用尺寸限定符不意味著資源僅用于這個尺寸的屏幕。如果沒有用限定符提供與當前設(shè)備配置相匹配的可選資源,那么系統(tǒng)會使用與配置最接近的資源。警告:如果所有使用尺寸限定符的資源都比當前屏幕大,那么系統(tǒng)將不會使用它們,并且應(yīng)用程序會在運行時崩潰(例如,如果所有的布局都被標記了xlarge限定符,而設(shè)備卻是一個普通尺寸的屏幕)。這個限定符被添加在API級別4以后的版本中。屏幕外觀longnotlonglong:長屏幕,如WQVGA、WVGA、FWVGAnotlong:非長屏幕,女口QVGA、HVGA、VGA這個限定符被添加在API級別4以后的版本中這個限定符完全是基于屏幕的外觀比率,不相對屏幕的方向。還要看screenLayout配置字段,匕指示了屏幕是否是長屏。屏幕方向portlandport:縱向設(shè)備(垂直)land:橫向設(shè)備(水平)如果用戶旋轉(zhuǎn)屏幕,這個限定能夠在應(yīng)用程序運行期間改變。orientation配置字段指示當前設(shè)備的方向。泊位carcar:設(shè)備停靠在汽車中
模式deskdesk:設(shè)備停靠在書桌中這個限定符被添加在API級別8以后的版本中如果用戶改變了設(shè)備的停靠地點,那么能夠在應(yīng)用程序的運行期間改變這個限定??梢允褂肬iModeManager對象來啟用或禁止這種模式。夜間模式nightnotnightnight:夜間notnight:白天被添加在API級別8以后的版本中如果夜間模式被保留在自動模式中(默認),那么在應(yīng)用程序運行期間,會基于白天的時間來進行模式的改變。可以使用UiModeManager對象來啟用或禁止這種模式。屏幕像素密度(dpi)1dpimdpihdpixhdpinodpitvdpildpi:針對大約120dpi的低分辨率屏幕;mdpi:針對大約160dpi的中等分辨率屏幕(在傳統(tǒng)的HVGA上);hdpi:針對大約240dpi的高分辨率屏幕;xhdpi:針對大約320dpi的超高分辨率屏幕,被添加在API基本8以后的版本中;nodpi:這個限定被用于不想根據(jù)匹配的設(shè)備分辨率進行縮放的位圖資源。tvdpi:在mdpi和hdpi之間的屏幕,大約是213dpi。這種分組不是主要的分辨率,大多數(shù)是為電視來考慮的,并且大多數(shù)應(yīng)用不需要它---提供mdpi和hdpi資源就可以滿足大多數(shù)應(yīng)用程序需要了,并且系統(tǒng)會適當?shù)目s放它們。這個限定符在API級別13以后被引入。四種主要的分辨率之間的縮放比例是:3:4:6:8(忽略tvdpi分辨率),因此一個9x9的ldpi位圖,在mdpi中是12x12、在hdpi中是18x18、在xhdpi中是24x24。如果感覺在電視或其他某些設(shè)備上的圖片資源不好看,并且想要試用tvdpi資源,那么縮放因子是1.33*mdpi。例如,一個100pxx100px的mdpi圖片的圖片應(yīng)該被放大成133pxx133px的tvdpi圖片。注意:使用分辨率限定符不意味著資源僅適用與對應(yīng)分辨率的屏幕。如果沒有提供與當前設(shè)備配置匹配的可選資源,那么系統(tǒng)會使用最接近的資源。觸屏類型notouchstylusfingernotouch:非觸屏設(shè)備stylus:有適用手寫筆的電阻屏設(shè)備finger:觸屏設(shè)備touchscreen配置字段,指示到了設(shè)備上的觸屏類型。鍵盤可用性keysexposedkeyshiddenkeyssoftkeysexposed:設(shè)備有可用的鍵盤。如果設(shè)備啟用了軟鍵盤,那么即使在硬鍵盤沒有暴露給用戶時也可以使用這個限定符。如果沒有提供軟鍵盤或者軟鍵盤被禁用,那么只有在硬鍵盤被暴露給用戶時才能夠使用這個限定符。keyshidden:設(shè)備有可用的硬鍵盤,但是被隱藏了,并且設(shè)備沒有可用的軟鍵盤。keyssoft:設(shè)備有可用的軟鍵盤,不管它是否可見。如果提供了keysexposed資源,但沒有keyssoft資源,那么只要系統(tǒng)有可用的軟鍵盤,系統(tǒng)就會使用keysexposed資源而不管鍵盤是
否可見。如果用戶打開了硬鍵盤,就可以在應(yīng)用程序運行期間改變這個限定。hardKeyboardHidden和keyboardHidden配置字段分別指明硬鍵盤的可見性以及可見的鍵盤類型(包括軟鍵盤)。主要文本輸入法nokeysqwerty12keynokeys:設(shè)備沒有用于文本輸入的硬鍵盤;qwerty:設(shè)備有標準的硬鍵盤,不管用戶是否可見;12key:設(shè)備有12個鍵的硬鍵盤,不管用戶是否可見。keyboard配置字段指明可用的主要文本輸入方法。導(dǎo)航鍵的有效性navexposednavhiddennavexposed:導(dǎo)航鍵對用戶可用;navhidden:導(dǎo)航鍵不可用。如果用戶能夠看到導(dǎo)航鍵,那么在應(yīng)用程序運行時就能夠改變這個限定。navigationHidden配置字段,指示導(dǎo)航鍵是否隱藏。主要的非觸屏導(dǎo)航方法nonavdpadtrackballwheelnonav:除了使用觸屏以外,設(shè)備沒有其他導(dǎo)航設(shè)施。dpad:設(shè)備有用于導(dǎo)航的定向板(d-pad)。trackbal1:設(shè)備有用于導(dǎo)航的軌跡球。wheel:設(shè)備有用于導(dǎo)航的定向滾輪(不常見)。navigation配置字段指明可用的導(dǎo)航方法類型。平臺版本(API級別)例如:v3v4v7等設(shè)備支持的API級別。如v1代表API級別1(帶有Android1.0或更咼版的設(shè)備),v4代表API級別4(帶有Android1.6或更咼版本的設(shè)備)警告:Android1.5和1.6只有在限定符跟平臺版本完全匹配時,才能匹配資源。注意:某些配置限定符從Android1.0開始就被添加了,因此不是所有的Android版本都支持所有的限定符。使用一個新的限定符,就隱含著添加了平臺版本限定符,這樣舊的設(shè)備才能夠保證忽略這個限定符。如使用w600dp限定符,將自動的包含v13限定符。因為有效寬度限定符在API級別13以后才支持。要避免一些問題的發(fā)生,就要始終包含一組默認的資源(這組資源沒有限定符)。限定符命名規(guī)則以下是有關(guān)使用配置限定符的命名規(guī)則:能夠給單一的資源集合指定多個限定符,限定符用短橫線分開。例如,drawable-en-rUS-land指定資源要用于橫向的美式英語設(shè)備。限定符必須按照表2列出的順序來使用,如:錯誤用法:drawable-hdpi-port正確用法:drawable-port-hdpi可選資源目錄不能嵌套,如:不能用以下這樣的目錄結(jié)構(gòu):res/drawable/drawable-en/值是大小寫敏感的。資源編譯器為了避免有關(guān)大小寫敏感的文件系統(tǒng)問題,會把目錄名轉(zhuǎn)換成小寫。命名中的任何大寫字母只是為了方便閱讀。每個限定符類型只能支持一種資源值。例如,如果想對西班牙和法國使用同一個可描畫文件,不能把目錄名命名成drawable-rES-rFR/。相反需要兩個目錄,如:drawable-rES和drawable-rFR/,每個目錄中包含對應(yīng)的文件。但是實際上不需要在這兩個目錄中復(fù)制相同的文件,可以使用資源命名別名來解決,詳細請看下面的“創(chuàng)建資源別名”。把這些可選資源保存到這些帶有限定符的命名目錄中后,Android會基于當前的設(shè)備配置在應(yīng)用中自動的應(yīng)用相應(yīng)的資源。每次請求資源,Android都會檢查包含請求資源文件的可選資源目錄,然后查找最匹配的資源。如果沒有跟實際設(shè)備配置匹配的可選資源,那么,Android會使用相應(yīng)的默認資源(不包含配置限定符的一組資源)。給資源創(chuàng)建別名當要給多種設(shè)備配置使用同一個資源時(但不打算把這個資源作為默認資源),不需要把相同的資源放在多個可選資源目錄中,相反,在某些情況下,能夠像保存在默認資源目錄中一樣給可選資源創(chuàng)一個別名。注意:不是所有的資源都提供能夠創(chuàng)建一個指向另外一個資源的別名的機制。實際上,animation/、menu/、raw/以及xml/目錄中的非特定資源不提供這中功能。。例如,假設(shè)有一個應(yīng)用程序圖標:icon.png,它在不同的地區(qū)需呀唯一的版本。但是,有兩個地區(qū),加拿大英語去和加拿大法語區(qū),它們需要使用相同的版本??梢约僭O(shè)需要把相同的圖片分別復(fù)制到加拿大英語區(qū)和加拿大法語區(qū)的資源目錄中,但實際上不需要這么做??梢园咽褂胕con_ca.png名字來保存這張圖片(icon.png以外的任意名稱),并且把它放到默認的res/drawabel/目錄中,然后在res/drawable-en-rCA/和res/drawable-fr-rCA/目錄中創(chuàng)建一個cion.xml文件,使用vbitmap>元素指向icon_ca.png資源。這樣就允許只保存一個版本的PNG文件,并且有兩個小的XML文件指向它??擅璁嬞Y源別名使用vbitmap>元素,給一個既存的可描畫資源創(chuàng)建一個別名,例如:?xmlversion="1.0"encoding="utf-8"?><bitmapxmlns:android="/apk/res/android"android:src="@drawable/icon_ca"/>如果把這個文件作為icon.xml來保存在一個可選資源目錄中,如res/drawable-en-rCA/,那么它就會被編譯進能夠使用R.drawable.icon來引用的資源,但是實際上它是R.drawable.cion_ca資源的一個別名。布局資源別名使用封裝在<merge〉元素中的<include>元素來給一個既存的布局創(chuàng)建別名,如:<?xmlversion="1.0"encoding="utf-8"?><merge><includelayout="@layout/main_ltr"/></merge>如果把這個文件保存為main.xml,那么它就會被編譯進能夠用R.layout.main來引用的一個資源,但是實際上它是R.layout.main」tr資源的別名。字符串和其他簡單值的資源別名只需簡單的使用被期望的字符串的資源ID作為新的字符串的值,就可以給一個既存的字符串創(chuàng)建一個別名,如:<?xmlversion="1.0"encoding="utf-8"?><resources><stringname="hello">Hello</string><stringname="hi">@string/hello</string></resources>R.string.hi資源現(xiàn)在是R.string.hello資源的一個別名。其他簡單的值資源也是用同樣的方法,如一個顏色值:<?xmlversion="1.0"encoding="utf-8"?><resources><colorname="yellow">#f00</color><colorname="highlight">@color/red</color></resources>使用資源提供最好的設(shè)備兼容性為了讓應(yīng)用程序支持多種設(shè)備配置,始終給應(yīng)用程序使用的每種資源類型都提供默認的資源是至關(guān)重要的。例如,如果應(yīng)用程序支持幾種語言,就要始終包含沒有語言和區(qū)域限定符的values/目錄。如果把所有的字符串文件都放到由語言和區(qū)域限定符的目錄中,那么當應(yīng)用程序運行在不支持應(yīng)用程序提供的語言集的設(shè)備上時,就會崩潰。但是,只要提供了默認的values/資源,應(yīng)用程序就會正確的運行(即使用戶不能理解應(yīng)用程序提供的語言集,也比程序崩潰要好。)同樣,如果基于屏幕的方向,提供了不同的布局資源,那么也應(yīng)該選擇一個方向作為默認布局。例如,不要在layout-land/目錄和layout-port目錄中分別提供橫向和縱向布局資源,而是要保留其中一個作為默認布局,如讓layout/目錄作為默認橫行布局資源的存放地,而layout-port/目錄保存縱向布局資源。提供默認資源是重要的,不僅因為可以讓應(yīng)用程序在沒有預(yù)計到的設(shè)備上運行,而且還因為某些在Android新版本中添加的配置限定符,舊版本不支持。如果使用了新的資源限定符,但是還要維護代碼與Android舊的版本的兼容性,那么當應(yīng)用程序運行在舊的Android版本上時,如果提供默認資源,應(yīng)用程序就會崩潰,因為使用了新的限定符命名的資源對應(yīng)用程序不可用。例如,如果minSdkVersion被設(shè)置為4,并且限定了所有的可描畫資源都是用night模式(night和notnight限定符在API級別8以后才被添加),那么API級別4的設(shè)備就不能訪問這些可描畫資源,應(yīng)用程序就會因而崩潰。在這種情況中,可以讓notnight模式的資源作為默認資源,因此應(yīng)該在可描畫資源的目錄名去除notnight限定符,使得資源目錄名如:drawable/、drawable-night/。因此,為了提供最好的設(shè)備兼容性,首先應(yīng)該始終提供默認資源,以便應(yīng)用程序能夠獲得正確執(zhí)行的資源,然后使用配置限定符給特殊的設(shè)備配置創(chuàng)建可選的資源。這種規(guī)則對一種情況除外,如果應(yīng)用的minSdkVersion是4或更大,在用屏幕分辨率限定符提供可選的描畫資源時,就不需要默認的可描畫資源。因為,即使沒有默認的可描畫資源,Android也能夠在可選的屏幕分辨率之間找到最匹配的資源,并且按照需要縮放位圖。但是,對于所有的設(shè)備類型,要獲取最好的體驗,應(yīng)該為三種類型的分辨率提供可選的資源。如果minSdkVersion小于4(Android1.5或更低的版本),要注意屏幕的尺寸、分辨率、以及外觀限定符是不被支持的,因此對于這些版本的平臺需要執(zhí)行另外的兼容性處理。給Android1.5提供屏幕資源的兼容性Android1.5及更低版本,不支持下列配置限定符:分辨率:ldpi、mdpi、hdpi、nodpi屏幕尺寸:small、normal、large屏幕外觀:long、notlong這些配置限定符是在Androidl.6中被引入的,因此Androidl.5(API級別3及更低版本都不支持它們。如果使用這些配置限定符,并且沒有提供相應(yīng)的默認資源,那么Android1.5設(shè)備可能使用上述屏幕配置限定命名的任意一個資源目錄中的資源,因為它忽略這些限定符,并使用它能夠找到的第一個匹配的可描畫資源。例如,如果應(yīng)用程序支持Androidl.5,并且包含了每種分辨率類型的可描畫資源(drawable-ldpi/、drawable-mdpi/、drawable-hdpi/),而且沒有包含默認的可描畫資源(drawable/),那么Androidl.5就會使用任意一個可描畫資源目錄中的資源,這樣就會導(dǎo)致用戶界面的不理想。因此在使用屏幕配置限定符時,要提供與Androidl.5及以前版本的兼容性:把中等分辨率、普通的屏幕尺寸以及非長屏幕作為默認資源來提供。因為所有的Androidl.5設(shè)備都有中等的分辨率、普通的屏幕尺寸以及非長的屏幕,所以能夠把這些類型的資源放到對應(yīng)的默認資源目錄中。例如,把所有的中等分辨率的可描畫資源放到drawable/目錄中(而不是drawable-mdpi/),把normal尺寸的資源放到對應(yīng)的默認資源目錄中,并且把notlong資源也放到對應(yīng)的默認資源目錄中。要確保SDK工具的版本時r6或更高的版本。SDK工具需要修訂版本6或更高,因為它包含一個新的打包工具,這個工具能夠自動的把相應(yīng)版本限定符中資源應(yīng)用于任何Androidl.0中不存在資源目錄。例如,分辨率限定符是在Androidl.6中(API級別4)被引入的,當打包工具遇到這樣的目錄時,它就會給目錄名中添加“v4”來確保舊版本不使用這些資源(只有API級別4和更高版本支持的限定符中的資源)。這樣,通過把中等分辨率資源放到?jīng)]有mdpi限定符的目錄中,它們依然可以被Androidl.5訪問,并且支持這個分辨率限定符和有中等分辨率屏幕的任何設(shè)備也會使用這個默認資源,因為它們跟設(shè)備最匹配。注意:Android的后續(xù)版本,如API級別8中引入的舊版本不支持的配置限定符。要提供最好的兼容性,就應(yīng)該始終給每種類型的資源包含一組應(yīng)用程序使用的默認資源。Android是如何查找最佳匹配資源的當請求一個資源時,Android會根據(jù)當前的設(shè)備配置在運行時選擇可選的資源。要演示Android是如何選擇可選資源的,先假設(shè)下列每個可描畫目錄包含了相同圖片的不同版本:drawable/drawable-en/drawable-fr-rCA/drawable-en-port/drawable-en-notouch-12key/drawable-port-ldpi/drawable-port-notouch-12key/并且假設(shè)設(shè)備配置如下:地區(qū)=en-GB屏幕方向=port屏幕像素分辨率=hdpi觸屏類型=notouch主要文本輸入方法=12key通過比較設(shè)備配置來選擇有效的可選資源:drawable-en-port。系統(tǒng)使用以下邏輯最終判斷要使用的資源:排除矛盾的設(shè)備配置的資源文件。Drawable-fr-rCA/目錄被排除,因為它跟en-GB矛盾drawable/drawable-en/dramwablo~fr-rCA/drawable-en-port/drawablo-on-notouch-12koy/drawablo-port-ldpi/drawablo-port-notouch-12koy/例外:屏幕像素分辨率限定符即使是矛盾的也不排除在外,即使設(shè)備的屏幕分辨率hdpi,drawable-port-ldpi/不被排除是因為在這個時點,每種分辨率都被認為是匹配的。選取列表2中最高優(yōu)先級的限定符。(從MCC開始,然后向下移動)。任何的資源目錄包含這個限定符嗎?如果沒有,則返回第2步,繼續(xù)比較下一個限定符(在這個例子中,在比較到語言限定符之前一直回到“no”。如果回答“yes”,那么繼續(xù)到步驟4消除資源目錄名中不包含這個限定符的目錄,在這個例子中,系統(tǒng)會排除所有不包含語言限定符的目錄:drawablo/drawablo-on/drawablo-on-port/drawablo-on-notouch-12koy/drawablo—port=ldpi/drawablo-port-notouch-12koy/例外:如果提問中的限定符是屏幕像素分辨率,Android會選擇那個與設(shè)備屏幕分辨率最接近的那個選項。通常,Android提供把一個大的原始圖片縮小的圖片的能力。返回,重復(fù)步驟2、3、4,直到剩下最后一個目錄。在這個例子中,屏幕方向是下一個要匹配的限定符,沒有指定屏幕方向的資源目錄就會
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年拼多多店鋪策劃出租協(xié)議書
- 2025年全球銷售合同風(fēng)險管理與控制實驗評估報告
- 2025年專利權(quán)合作開發(fā)協(xié)議范本
- 2025年合同保證書樣式
- 2025年兩個孩子財產(chǎn)分割協(xié)議樣本
- 2025年二手房產(chǎn)融資協(xié)議模板
- 2025年動力產(chǎn)品購銷合同績效評估
- 2025年城市旅游策劃合作框架協(xié)議
- 2025年住宅區(qū)物業(yè)策劃管控改進協(xié)議
- 2025年個人股權(quán)聯(lián)營協(xié)議書樣本
- 復(fù)產(chǎn)復(fù)工試題含答案
- 湖南省長沙市2023-2024學(xué)年八年級下學(xué)期入學(xué)考試英語試卷(附答案)
- 部編版語文三年級下冊第六單元大單元整體作業(yè)設(shè)計
- 售后服務(wù)經(jīng)理的競聘演講
- 臨床醫(yī)技科室年度運營發(fā)展報告
- 慢加急性肝衰竭護理查房課件
- 文件丟失應(yīng)急預(yù)案
- 從建設(shè)和諧社會角度思考治超限載(十)
- 幼兒園小班開學(xué)家長會課件
- 云南華葉投資公司2023年高校畢業(yè)生招聘1人筆試參考題庫(共500題)答案詳解版
- ABB電子時間繼電器CTMVS系列操作與安裝指南
評論
0/150
提交評論