資源是你在代碼中使用到的并且在編譯時被打包進你的應用程序的附加文件。Android支持多種不同的文件,包括XML、PNG和JPEG文件。XML文件的格式決定于其描述的內容。這些文件將描述文件支持的類型、語法或格式。?
處于加載效率的考慮,資源被從代碼中分離出來,而且XML文件被編譯進二進制代碼中。字符串,類似的會被壓縮存儲為更經濟的格式。android文件夾在哪里。處于這樣或那樣的原因,Android平臺中會存在很多不同的資源和資源定義文件。
這些文件包括以下部分:
????*?資源
?????????o????創建資源
?????????o????使用資源
??????????????§??在代碼中使用資源
??????????????§??引用資源
??????????????§??引用主體屬性
??????????????§??使用系統屬性
?????????o????更改資源
?????????o????資源引用
?????????o????術語表
????*?國際化(l18N)
????配合資源引用文檔,Android提供了一套經濟的資源處理技術。他轉化了大量的資源信息,使Android在運行時無需了解文檔的內容,僅僅在你需要的時候指導他在哪兒就可以了。
資源
?????這一節包含了與資源有關聯的術語表和一系列使用資源的代碼事例。更完整的Android資源指南請參看“資源”一章。
Android資源系統保存所有與代碼無關的資源的存根。Android是什么文件夾。你可以使用Resources類訪問你應用程序的資源;與應用程序相關聯的資源實例可以通過Context.getResources()得到。
一個應用程序的資源可以被構建系統在構建時編譯進二進制的應用程序里。為了使用資源,你需要正確的初始化你應用程序中的資源樹并且構建你的應用程?序。在構建過程的部分,每個資源的標識被產生,你可以在代碼中使用他們。這些標識允許編譯器校驗你應用程序中的代碼和資源定義是否匹配。
有關本章的其他細節請參見教程如何使用資源的部分。手機中的android是什么文件、
創建資源
?????Android支持字符串,位圖和許多其他類型的資源。每一種資源定義文件的語法和格式及保存的位置取決于其依賴的對象。通常,你可以通過三種文件創建資?源:XML文件(除位圖和原生文件外),位圖文件(作為圖片)和原生文件(所有其他的類型,比如聲音文件)。事實上,這里有兩種不同類型的XML文件,一?種是作為資源被編譯近應用程序,另一種怎是資源的描述,被aapt使用。下面的表格詳細說明了這些XML文件的類型和結構。
你可以在你項目res/目錄下的適當子目錄下創建和存儲資源文件。手機里android是什么文件,Android使用資源編譯器訪問資源所在的子目錄和格式化的文件。下面的表格列出了每一種資源的文件類型。參見“資源引用”一節可以了解關于對象、語法和格式方面的內容。?
?
?目錄 | ?資源類型 |
?res/anim | ?XML文件編譯為楨序列動畫或者自動動畫對象。 |
?res/drawable | ?.png,9.png,.jpg文件被編譯為Drawable資源子類型: 使用Resources.getDrawable(id)可以獲得資源類型 ????*?位圖文件 |
?res/layout | ?資源編譯為屏幕布局器。參見“布局器”一章 |
?res/values | ?XML?文件可以被編譯為多種資源 注意:不像其他res下的目錄,這個目錄可以包含多個資源描述文件。Android文件、XML文件元素類型控制著這些資源被R類放置在何處。 這些文件可以自定義名稱。這里有一些約定俗成的文件。 ????*?arrays.xml?定義數組。 |
?res/xml | ?自定義的XML文件。這些文件將在運行時編譯進應用程序,并且使用Resources.getXML()方法可以在運行時獲取。 |
?res/raw | ?自定義的原生資源,將被直接拷貝入設備。android常用的布局。這些文件將不被壓縮近你的應用程序。使用帶有ID參數的Resources.getRawResource()方法可以獲得這些資源,比如R.raw.somefilename。 |
??
資源被最終編譯近APK文件。Android創建包裝類R,你可以用他找回資源。R包含一些與資源所在目錄同名的子類。
全局資源
????*?很多資源都允許你定義顏色。android中的kotlin?Android接受web風格的顏色定義-一組十六進制的顏色值,按照以下序列排列:#RGB,#ARGB,#RRGGBB,#AARRGGBB。
????*?所有的顏色都支持ALPHA通道,頭兩位十六進制數字指定透明度。0在ALPHA通道中表示全透明,默認值是不透明。
使用資源
??????這一節講述如何使用你所創建的資源,包括:
·?????????在代碼中使用資源?如何在代碼中使用資源。
·?????????如何引用其他資源中的資源?你可以從其他資源中引用資源。你可以重新使用資源內部的通用資源。android中的ssl?
·?????????支持資源更替?你可以在加載時依據語言、顯示配置和主機硬件的不同指定不同的資源。
在編譯時,Android生成名為R的類。R包含你應用程序所用到的所有的類。這個類包含一些與res下子目錄同名的子類。這些子類包含每一個你在?資源文件中定義的資源的標識。這些資源標識可以在你的代碼中引用。Android文件夾。這里有一段簡單的資源文件,包含一些文字,布局器和圖片資源。
注意:R類是自動生成的,并且它不能被手動修改。當資源發生變動時,它會自動修改。
package?com.android.samples;
public?final?class?R?{
????public?static?final?class?string?{
????????public?static?final?int?greeting=0x0204000e;
????????public?static?final?int?start_button_text=0x02040001;
????????public?static?final?int?submit_button_text=0x02040008;
????????public?static?final?int?main_screen_title=0x0204000a;
????};
????public?static?final?class?layout?{
????????public?static?final?int?start_screen=0x02070000;
????????public?static?final?int?new_user_pane=0x02070001;
????????public?static?final?int?select_user_list=0x02070002;
????};
????public?static?final?class?drawable?{
????????public?static?final?int?company_logo=0x02020005;
????????public?static?final?int?smiling_cat=0x02020006;
????????public?static?final?int?yellow_fade_background=0x02020007;
????????public?static?final?int?stretch_button_1=0x02020008;
????};
};
在代碼中使用資源
在代碼中使用資源需要知道完整的資源ID和你的資源對象類型。下面是資源引用語法:
R.resource_type.resource_name?或者?android.R.resource_type.resource_name
resource_type是R類中保存制定類型資源的子類。resource_name是定義在XML文件中的資源名或者被其他文件類型所定義的?資源文件名(無擴展名)每一類型的資源都依據其類型,被添加入某一指定的R子類;學習R子類的類型關系請參考資源引用一節。安卓手機android文件夾。你的應用程序引用已被編譯的資?源時可以不帶包名(比如R.resource_type.resource_name)。Android包含一個標準資源的序號,比如屏幕的樣式和按鈕的?背景。引用這些資源,你必須使用帶android的語法,比如android.R.drawable.button_background。
下面是一些好的和不好的代碼例子:
//?Load?a?background?for?the?current?screen?from?a?drawable?resource.
this.getWindow().setBackgroundDrawableResource(R.drawable.my_background_image);
?
//?WRONG?Sending?a?string?resource?reference?into?a
//?method?that?expects?a?string.
this.getWindow().setTitle(R.string.main_title);
?
//?RIGHT?Need?to?get?the?title?from?the?Resources?wrapper.
this.getWindow().setTitle(Resources.getText(R.string.main_title));
?
//?Load?a?custom?layout?for?the?current?screen.
setContentView(R.layout.main_screen);
?
//?Set?a?slide?in?animation?for?a?ViewFlipper?object.
mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,
????????R.anim.hyperspace_in));
?
//?Set?the?text?on?a?TextView?object.
TextView?msgTextView?=?(TextView)findViewByID(R.id.msg);
msgTextView.setText(R.string.hello_message);
引用資源
一個屬性值(或資源)同樣可以引用資源。這種用法常在資源布局器文件中用于文字和圖片(定義在其他文件中)。這種方法可以引用任何資源,包括顏色和整數。安卓工程中src目錄下存放什么文件。
比如,如果我們有一個顏色資源,我們可以寫一個布局器文件,在其中指定文本顏色和尺寸。
????xmlns:android="http://schemas.android.com/apk/res/android"
????android:layout_width="fill_parent"?android:layout_height="fill_parent"
????android:textColor="@color/opaque_red"
????android:text="Hello,?World!"?/>
注意,“@”前綴聲明這是一個資源引用—隨后的文本是以@[package:]type/name形式提供的資源名。在這個例子中我們不需要指明特定的包,因為我們在我們自己的包中引用。引用一個系統文件時,我們需要這樣寫:
????xmlns:android="http://schemas.android.com/apk/res/android"
????android:layout_width="fill_parent"?android:layout_height="fill_parent"
????android:textColor="@android:color/opaque_red"
????android:text="Hello,?World!"?/>
在其他的例子中你會經常看到使用資源引用實現本地化。
????xmlns:android="http://schemas.android.com/apk/res/android"
????android:layout_width="fill_parent"?android:layout_height="fill_parent"
????android:textColor="@android:color/opaque_red"
????android:text="@string/hello_world"?/>
這種簡便的方法可以在資源之間引用。比如,我們可以創建一個新的可繪制對象,一個真實存在的圖片的別名:
????@android:drawable/theme2_background
引用主題屬性
其他種類的資源可以引用當前主題的屬性值。android中常用的四個布局是,這些屬性只能是樣式資源或XML屬性。利用這種方法,你可以定制你的UI界面,使其與當前主題保持風格上的統一。
下面的例子展示了如何使用系統主題設置布局器中的文本顏色:
????xmlns:android="http://schemas.android.com/apk/res/android"
????android:layout_width="fill_parent"? android:layout_height="fill_parent"
????android:textColor="?android:textDisabledColor"
????android:text="@string/hello_world"?/>
注意:引用主題屬性的方法和引用資源的方法很相似,僅僅是用“?”替代了“@”。當你使用這個標記,你所提供的資源名必須能夠在主題屬性中找到,因?為資源工具認為這個資源屬性是被期望得到的,你不需要明確的支出他的類型?(?android:attr/android:textDisabledColor)。
使用系統資源
許多包含于系統之中的資源是能被應用程序所訪問的。所有的資源被定義在android.R類中。Android 資源加載、比如,你可以使用一下代碼在屏幕上顯示標準應用程序的ICON:
public?class?MyActivity?extends?Activity
{
????public?void?onStart()
????{
????????requestScreenFeatures(FEATURE_BADGE_IMAGE);
????????super.onStart();
????????setBadgeResource(android.R.drawable.sym_def_app_icon);
????}
}
類似的,下面的代碼會更改你的系統主題:
public?class?MyActivity?extends?Activity
{
????public?void?onStart()
????{
????????super.onStart();
????????setTheme(android.R.style.Theme_Black);
????}
}
為語言和配置提供可更換的資源
你可以為你的應用程序選擇不同的UI語言和硬件配置。注意,盡管你可以使用不同的字符串,布局管理器和其他的很多資源,SDK不會暴露方法支持你顯?示的指定何種資源需要被加載。Android識別整套資源的硬件和本地化屬性,而后適當的加載他們。用戶可以在設備的設置面板中更換語言設置。
為了包含可更換資源,創建平行的資源目錄,以限定的方式命名這些目錄,配置文件也同樣適用(語言、屏幕等)。下面的例子給出同時支持英語和法語的方法:
MyApp/
????res/
????????values-en/
????????????strings.xml
????????values-fr/
????????????strings.xml
Android支持多種命名限定和多樣的值風格。添加這些信息到資源目錄末尾,使用連接號分離。你可以為單個目錄添加多段限定。但是他們需要保持一定順序以方便閱讀和理解。下面的例子就是一個帶有限定的可繪制對象資源目錄的全名:
MyApp/
????res/
????????drawable-en-rUS-port-160dpi-finger-keysexposed-qwerty-dpad-480x320/
更具代表性的,你可能需要指定一些資源配置參數。你也許需要除去完整列表中的一些值,但是還有很多很多值被保留在列表中:
MyApp/
????res/
????????drawable-en-rUS-finger/
????????drawable-port/
????????drawable-port-160dpi/
????????drawable-qwerty/?
?
?限定詞 | ?值 |
?語言 | ?兩字節ISO?639-1?低位的語言編碼,比如:en,?fr,?es |
?區域 | ?兩字節ISO?3166-1-alpha-2?帶有小寫"r"前綴的大寫地區編碼。如:?rUS,?rFR,?rES |
?屏幕方向 | ?port,?land,?square |
?屏幕像素密度 | ?92dpi,?108dpi,?etc. |
?觸摸屏類型 | ?notouch,?stylus,?finger |
?用戶是否可以使用鍵盤 | ?keysexposed,?keyshidden |
?默認的文字輸入方法 | ?nokeys,?qwerty,?12key |
?默認的非觸摸導航方法 | ?notouch,?dpad,?trackball,?wheel |
?屏幕尺寸 | ?320x240,?640x480,?etc.?較大的尺寸必須首先聲明。 |
??
次列表不包括設備定制的參數,比如信號、商標等。所有應用程序應該知道的信息都需要按照上面的列表信息編碼。
這里有一些命名的通用原則:
·?????????值之間用連接號連接
·?????????值是大小寫敏感的,比如
o????一個指定的drawable目錄必須命名為drawable-port,而不是drawable-PORT。
·?????????每種限定詞只能有一種選擇,你不能命名目錄為drawable-rEN-rFR/。
·?????????你可以添加多種限定詞,但是每個限定詞必須在在上面列表中。比如drawable-en-rUS-land表明其用于直板的美式英語設別上。
·????????帶有限定詞的目錄不能被嵌套,比如,res/drawable/drawable-en是不允許的。
·????????資源引用在語法中表示為未加修飾的表達式,比如?MyApp/res/drawable-port-92dp/myimage.png,在XML中表示為:@drawable/myimage,在代碼中表示為:R.drawable.myimage。
Android如何找到最匹配的目錄
Android將根據配置文件挑選資源,挑選過程為:
1.排除所有和配置文件中指定的當前設備參數不匹配的資源。比如,如果屏幕像素密度為108dpi,下面所列出的目錄中,只有MyApp/res/drawable-port-92dpi/會被排除。
MyApp/res/drawable/myimage.png
MyApp/res/drawable-en/myimage.png
MyApp/res/drawable-port/myimage.png
MyApp/res/drawable-port-92dpi/myimage.png
?
2.接下來系統將根據限定字的多少來篩選。例如,如果你的本地系統識別為en-GB編碼的便攜設備,隨后我們還剩兩個目錄可以匹配。
MyApp/res/drawable/myimage.png
MyApp/res/drawable-en/myimage.png
MyApp/res/drawable-port/myimage.png
?
3.選擇機制將根據配置文件中定義的優先級,優先級定義于上面的列表順序中。
MyApp/res/drawable-en/myimage.png
MyApp/res/drawable-port/myimage.png
?