Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> android下面res目錄,androidres目錄

android下面res目錄,androidres目錄

編輯:關於android開發

android下面res目錄,androidres目錄


1. 相關文件夾介紹      在Android項目文件夾裡面,主要的資源文件是放在res文件夾裡面的。assets文件夾是存放不進行編譯加工的原生文件,即該文件夾裡面的文件不會像xml,java文件被預編譯,可以存放一些圖片,html,js, css等文件。在後面會介紹如何讀取assets文件夾的資源!      res文件夾裡面的多個文件夾的各自介紹(來自網上的Android開發指南中文版內容):

目錄Directory

資源類型Resource Types

res/anim/

XML文件,它們被編譯進逐幀動畫(frame by frame animation)或補間動畫(tweened animation)對象

res/drawable/

 

res/drawable-hdpi/

 

res/drawable-ldpi/

 

res/drawable-mdpi/

 

res/drawable-xhdpi/

 

res/drawable-xxhdpi/

 

res/drawable-zh/

 

res/drawable-en-rUS-port-hdpi/

.png、.9.png、.jpg文件,它們被編譯進以下的Drawable資源子類型中:

要獲得這種類型的一個資源,可以使用Resource.getDrawable(id)

位圖文件

9-patches(可變尺寸的位圖)

為了獲取資源類型,使用mContext.getResources().getDrawable(R.drawable.imageId)

注意:放在這裡的圖像資源可能會被aapt工具自動地進行無損壓縮優化。比如,一個真彩色但並不需要256色的PNG可能會被轉換為一個帶調色板的8位PNG。這使得同等質量的圖片占用更少的資源。所以我們得意識到這些放在該目錄下的二進制圖像在生成時可能會發生變化。如果你想讀取一個圖像位流並轉換成一個位圖(bitmap),請把圖像文件放在res/raw/目錄下,這樣可以避免被自動優化。

 

drawable- hdpi、drawable- mdpi、drawable-ldpi的區別:

  (1)drawable-hdpi裡面存放高分辨率的圖片,如WVGA (480x800),FWVGA (480x854)

  (2)drawable-mdpi裡面存放中等分辨率的圖片,如HVGA (320x480)

  (3)drawable-ldpi裡面存放低分辨率的圖片,如QVGA (240x320)

  系統會根據機器的分辨率來分別到這幾個文件夾裡面去找對應的圖片。

  在開發程序時為了兼容不同平台不同屏幕,建議各自文件夾根據需求均存放不同版本圖片。

Aphone一般到drawable-hdpi去取圖片,drawable-hdpi沒有圖片再到drawable-mdpi去取圖片,而後再到drawable-ldpi取圖片

Apad一般到drawable-mdpi去取圖片,drawable-hdpi沒有圖片再到drawable-ldpi去取圖片

橫屏含有drawable-land- hdpi、drawable-land- mdpi、drawable-land-ldpi的區別:

Aphone一般到drawable-land-hdpi去取圖片,drawable-land-hdpi沒有圖片再到drawable-land-mdpi去取圖片,而後再到drawable-land-ldpi取圖片,而後才會到drawable-hdpi去取圖片,drawable-hdpi沒有圖片再到drawable-mdpi去取圖片,而後再到drawable-ldpi取圖片

Apad一般到drawable-land-mdpi去取圖片,drawable-land-hdpi沒有圖片再到drawable-land-ldpi去取圖片,而後才會到drawable-mdpi去取圖片,drawable-hdpi沒有圖片再到drawable-ldpi去取圖片

 

-finger    用於觸摸屏的設備

-hdpi    近似於240dpi的高級顯示密度的屏幕

-mdpi    近似於160dpi的中級顯示密度的屏幕

-ldpi    近似於120dpi的低級顯示密度的屏幕

-land    橫屏顯示

-port    豎屏顯示

-long    比較長的屏幕,例如WQVGA(432×240), WVGA(800×480), FWVGA(854×480)

 

drawable-en:英文設置下的圖片資料,drawable-zh中文設置下的圖片資料。
若是要為不合像素的手機籌辦的話,須要(以drawable-en為例申明)
:drawable-en-hdpi
:drawable-en-ldpi
:drawable-en-mdpi
同理:為美式英語,
:drawable-en-rUS-hdpi
:drawable-en-rUS-ldpi
:drawable-en-rUS-mdpi

 

//豎屏

:drawable-en-rUS-port-hdpi
:drawable-en-rUS-port-ldpi
:drawable-en-rUS-port-mdpi
//橫屏
:drawable-en-rUS-land-hdpi
:drawable-en-rUS-land-ldpi
:drawable-en-rUS-land-mdpi

建樹這些文件夾是有次序的。即按優先級別分列的,見下表。所以建樹文件夾時一般從左到右的分列其優先級別如:drawable-en-rUS-land-mdpi
如:drawable-en-rUS-port-160dpi-finger-qwerty-dpad-480 x320/

res/layout/

res/layout-land/   res/layout-port/   res/layout-land-1024x720 /   res/layout-port-976x768 / 如下目錄: layout layout-land layout-port layout-land-1024x720 //1024x768橫屏 layout-port-976x768     //1024x768豎屏 注意事項: 在android3.0之前版本,要適配指定的分辨率,需將layout文件夾定義成如下名稱:   layout   layout-1024x768    layout-1024x600    layout-1280x768    但是,在android3.0後,要適配如上的分辨率,需將高度減去48像素,即底部狀態欄的高度,android方可識別。針對以上分辨率,android4.0的layout文件夾應該定義為如下名稱:   layout   layout-1024x720    layout-1024x552   layout-1280x720    還有一種情況 如果是平板,有可能是豎屏的,需要是   layout   layout-976x768    layout-976x600    layout-976x768 

 

格式如上。用法與正常的相同。手機會根據分辨率,自己找對應的布局,不用控制, 只需在res下按上述方式,新建對應layout就可以。     注意的是分辨率中大的數字必須寫到前面,否則會產生語法錯誤。 如layout-768x1024 的寫法是錯誤的。   注意格式,【layout】-【port/land】-【長度x寬度】   如何限定橫屏或者豎屏?

有些人討厭玩手機的時候橫豎屏來回的切換,有些應用也限定了應用程序只使用橫屏或者只使用豎屏,即使手機設置了“自動切換橫豎屏”。比如“水果忍者”是不能豎屏的(雙人模式除外了)

解決辦法:只需要在AndroidManifest.xml的Activity標簽中加入:android:screenOrientation="landscape"

android:screenOrientation="landscape"表示橫屏

android:screenOrientation="protrait"表示豎屏

這樣,所設定的應用程序就只能是橫屏或者豎屏了

 

res/values/

 

res/values-ldpi/
res/values-mdpi/
res/values-hdpi/
res/values-xhdpi/
res/values-nodpi/
res/values-nodpi-1024×600/
res/values-nodpi-1280×800/
res/values-nodpi-800×480/

res/values-en-rUS/

可以被編譯成很多種類型的資源的XML文件。

注意: 不像其他的res/文件夾,它可以保存任意數量的文件,這些文件保存了要創建資源的描述,而不是資源本身。XML元素類型控制這些資源應該放在R類的什麼地方。

盡管這個文件夾裡的文件可以任意命名,不過下面使一些比較典型的文件(文件命名的慣例是將元素類型包含在該名稱之中):

      array.xml 定義數組

     colors.xml 定義color drawable和顏色的字符串值(color string values)。使用Resource.getDrawable()和Resources.getColor()分別獲得這些資源。

     dimens.xml定義尺寸值(dimension value)。使用Resources.getDimension()獲得這些資源。

      strings.xml定義字符串(string)值。使用Resources.getString()或者Resources.getText()獲取這些資源。getText()會保留在UI字符串上應用的豐富的文本樣式。

      styles.xml 定義樣式(style)對象。

 

以添加一個 英語(美國):values-en-rUS 為例

1、把下面左列表中的Region添加到左邊的列表裡面,並在Region輸入框裡輸入us

2、這時,上面的消息提示:如果用Region的話,需要使用語言項,和Region一樣,我們把Language也添加到右面的列表裡面,填入en

3、點擊Finish按鈕,資源文件就會建好了,目錄:/res/values-en-rUS(其實上面一大堆操作,就是為生成這個目錄

android多國語言文件夾文件匯總如下:

Arabic, Egypt (ar_EG) -----------------------------阿拉伯語,埃及
Arabic, Israel (ar_IL) -------------------------------阿拉伯語,以色列
Bulgarian, Bulgaria (bg_BG) ---------------------保加利亞語,保加利亞
Catalan, Spain (ca_ES) ---------------------------加泰隆語,西班牙
Czech, Czech Republic (cs_CZ) -----------------捷克語,捷克共和國
Danish, Denmark(da_DK) ------------------------丹麥語,丹麥
German, Austria (de_AT) -------------------------德語,奧地利
German, Switzerland (de_CH) -------------------德語,瑞士
German, Germany (de_DE) ----------------------德語,德國
German, Liechtenstein (de_LI) ------------------德語,列支敦士登的
Greek, Greece (el_GR) ----------------------------希臘語,希臘
English, Australia (en_AU) -------------------------英語,澳大利亞
English, Canada (en_CA) --------------------------英語,加拿大
English, Britain (en_GB) ----------------------------英語,英國
English, Ireland (en_IE) -----------------------------英語,愛爾蘭
English, India (en_IN) --------------------------------英語,印度
English, New Zealand (en_NZ) ---------------------英語,新西蘭
English, Singapore(en_SG) --------------------------英語,新加坡
English, US (en_US) -----------------------------------英語,美國
English, Zimbabwe (en_ZA) --------------------------英語,津巴布韋
Spanish (es_ES) ----------------------------------------西班牙
Spanish, US (es_US) -----------------------------------西班牙語,美國
Finnish, Finland (fi_FI) ---------------------------------芬蘭語,芬蘭
French, Belgium (fr_BE) -------------------------------法語,比利時
French, Canada (fr_CA) -------------------------------法語,加拿大
French, Switzerland (fr_CH) --------------------------法語,瑞士
French, France (fr_FR) --------------------------------法語,法國
Hebrew, Israel (he_IL) ---------------------------------希伯來語,以色列
Hindi, India (hi_IN) -------------------------------------印地語,印度
Croatian, Croatia (hr_HR) ----------------------------克羅地亞語,克羅地亞
Hungarian, Hungary (hu_HU) ------------------------匈牙利語,匈牙利
Indonesian, Indonesia (id_ID) ------------------------印尼語,印尼
Italian, Switzerland (it_CH) ----------------------------意大利語,瑞士
Italian, Italy (it_IT) ---------------------------------------意大利語,意大利
Japanese (ja_JP) ----------------------------------------日語
Korean (ko_KR) ------------------------------------------朝鮮語
Lithuanian, Lithuania (lt_LT) --------------------------立陶宛語,立陶宛
Latvian, Latvia (lv_LV) ---------------------------------拉托維亞語,拉托維亞
Norwegian-Bokmol, Norway(nb_NO) ---------------挪威語,挪威
Dutch, Belgium (nl_BE) --------------------------------荷蘭語,比利時
Dutch, Netherlands (nl_NL) ---------------------------荷蘭語,荷蘭
Polish (pl_PL) -------------------------------------------波蘭
Portuguese, Brazil (pt_BR) ---------------------------葡萄牙語,巴西
Portuguese, Portugal (pt_PT) ------------------------葡萄牙語,葡萄牙
Romanian, Romania (ro_RO) ------------------------羅馬尼亞語,羅馬尼亞
Russian (ru_RU) ----------------------------------------俄語
Slovak, Slovakia (sk_SK) ------------------------------斯洛伐克語,斯洛伐克
Slovenian, Slovenia (sl_SI) ---------------------------斯洛文尼亞語,斯洛文尼亞
Serbian (sr_RS) ----------------------------------------塞爾維亞語
Swedish, Sweden (sv_SE) ----------------------------瑞典語,瑞典
Thai, Thailand (th_TH) --------------------------------泰語,泰國
Tagalog, Philippines (tl_PH) --------------------------菲律賓語,菲律賓
Turkish, Turkey (tr_TR) -------------------------------土耳其語,土耳其
Ukrainian, Ukraine (uk_UA) --------------------------聯合王國
Vietnamese, Vietnam (vi_VN) -----------------------越南語,越南
Chinese, PRC (zh_CN)--------------------------------中文,中國
Chinese, Taiwan (zh_TW)-----------------------------中文,台灣

res/xml/

任意的XML文件,在運行時可以通過調用Resources.getXML()讀取。

res/raw/

直接復制到設備中的任意文件。它們無需編譯,添加到你的應用程序編譯產生的壓縮文件中。要使用這些資源,可以調用Resources.openRawResource(),參數是資源的ID,即R.raw.somefilename

 

2.自動生成的R class

     在項目文件夾的gen文件夾裡面有個R.java,我們平常引用的資源主要引用這個類的變量。        注意:R類是自動生成的,並且它不能被手動修改。當資源發生變動時,它會自動修改。  

3. 在代碼中使用資源

下面是一個引用資源的語法: R.resource_type.resource_name  或者 android.R.resource_type.resource_name   其中resource_type是R的子類,保存資源的一個特定類型。resource_name是在XML文件定義的資源的name屬性,或者有其他文件類型為資源定義的文件名(不包含擴展名,這指的是drawable文件夾裡面的icon.png類似的文件,name=icon)。 Android包含了很多標准資源,如屏幕樣式和按鈕背景。要在代碼中引用這些資源,你必須使用android進行限定,如android.R.drawable.button_background。   下面是官方給出的一些在代碼中使用已編譯資源的正確和錯誤用法的例子:        查了SDK Doc,才明白為什麼window.setTitle要先Resources.getText,原來setTitle的參數是CharSequence,Resources.getText(int)返回的是CharSequence;而其他setText的參數有的是CharSequence,有的是int(這就是Resources變量值)。   同時官方還給了兩個使用系統資源的例子:  

4. xml文件內引用資源

1) 引用自定義的資源        android:text="@string/hello"        這裡使用"@"前綴引入對一個資源的引用--在@[package:]type/name形式中後面的文本是資源的名稱。在這種情況下,我們不需要指定包名,因為我們引用的是我們自己包中的資源。type是xml子節點名,name是xml屬性名:   2) 引用系統資源        android:textColor="@android:color/opaque_red"   指定package: android   3) 引用主題屬性         另外一種資源值允許你引用當前主題中的屬性的值。這個屬性值只能在樣式資源和XML屬性中使用;它允許你通過將它們改變為當前主題提供的標准變化來改變UI元素的外觀,而不是提供具體的值。         android:textColor="?android:textDisabledColor"              注意,這和資源引用非常類似,除了我們使用一個"?"前綴代替了"@"。當你使用這個標記時,你就提供了屬性資源的名稱,它將會在主題中被查找--因為資源工具知道需要的屬性資源,所以你不需要顯示聲明這個類型(如果聲明,其形式就是?android:attr/android:textDisabledColor)。除了使用這個資源的標識符來查詢主題中的值代替原始的資源,其命名語法和"@"形式一致:?[namespace:]type/name,這裡類型可選。  

5. 替換資源(為了可替換的資源和配置)

    個人理解這個替換資源主要用於適應多種規格的屏幕,以及國際化。對於這部分的內容,請參考http://androidappdocs.appspot.com/guide/topics/resources/resources-i18n.html,以後再研究!   

6. Color Value

語法: 可以保存在res/values/colors.xml (文件名可以任意)。 xml引用:android:textColor="@color/color_name" Java引用: int color = Resources.getColor(R.color.color_name)   其中#color_value有以下格式(A代表Alpha通道): #RGB #ARGB #RRGGBB #AARRGGBB   xml示例(聲明兩個顏色,第一個不透明,第二個透明色):  

7.Color Drawables

語法: 可以保存在res/values/colors.xml。 xml引用:android:background="@drawable/color_name" java引用:Drawable redDrawable = Resources.getDrawable(R.drawable.color_name)   color_name和上面的一樣。個人認為,一般情況下使用color屬性,當需要用到paintDrawable時才使用drawable屬性。   xml示例:  

8. 圖片

      一般放在res/drawable/裡面。官方提示png (preferred), jpg (acceptable), gif (discouraged),看來一般使用png格式比較好! xml引用  @[package:]drawable/some_file java引用 R.drawable.some_file     引用是不帶擴展名  

9. dimension

語法: 一般保存為res/values/dimen.xml。 度量單位: px(象素): 屏幕實際的象素,常說的分辨率1024*768pixels,就是橫向1024px, 縱向768px,不同設備顯示效果相同。   in(英寸): 屏幕的物理尺寸, 每英寸等於2.54厘米。   mm(毫米): 屏幕的物理尺寸。   pt(點)  : 屏幕的物理尺寸。1/72英寸。   dp/dip  : 與密度無關的象素,一種基於屏幕密度的抽象單位。在每英寸160點的顯示器上,1dp = 1px。但dp和px的比例會隨著屏幕密度的變化而改變,不同設備有不同的顯示效果。   sp      : 與刻度無關的象素,主要用於字體顯示best for textsize,作為和文字相關大小單位。   XML: android:textSize="@dimen/some_name"
Java: float dimen = Resources.getDimen(R.dimen.some_name)   xml示例:  

10. string

下面是官方給出的正確/錯誤的例子:      對於帶格式的string,例如在字符串中某些文字設置顏色,可以使用html標簽。對於這類型的string,需要進行某些處理,在xml裡面不可以被其他資源引用。官方給了一個例子來對比普通string和帶格式string的使用: Xml代碼 Java代碼     另外對於帶風格/格式的string的處理,就麻煩一點點。官方給了一個例子: 這裡的%1$d是個十進制數字,%2$s是字符串。當我們把某個字符串賦值給%2$s之前,需要用htmlEncode(String)函數處理那個字符串:  然後用String.format() 來實現賦值,接著用fromHtml(String) 得到格式化後的string:  

11. assets文件夾資源的訪問

       assets文件夾裡面的文件都是保持原始的文件格式,需要用AssetManager以字節流的形式讀取文件。       1. 先在Activity裡面調用getAssets()來獲取AssetManager引用。       2. 再用AssetManager的open(String fileName, int accessMode)方法則指定讀取的文件以及訪問模式就能得到輸入流InputStream。        3. 然後就是用已經open file 的inputStream讀取文件,讀取完成後記得inputStream.close()。       4.調用AssetManager.close()關閉AssetManager。

需要注意的是,來自Resources和Assets 中的文件只可以讀取而不能進行寫的操作
以下為從Raw文件中讀取:
代碼
    public String getFromRaw(){ 
            try { 
                InputStreamReader inputReader = new InputStreamReader( getResources().openRawResource(R.raw.test1));
                BufferedReader bufReader = new BufferedReader(inputReader);
                String line="";
                String Result="";
                while((line = bufReader.readLine()) != null)
                    Result += line;
                return Result;
            } catch (Exception e) { 
                e.printStackTrace(); 
            }             
    } 
以下為直接從assets讀取
代碼
    public String getFromAssets(String fileName){ 
            try { 
                 InputStreamReader inputReader = new InputStreamReader( getResources().getAssets().open(fileName) ); 
                BufferedReader bufReader = new BufferedReader(inputReader);
                String line="";
                String Result="";
                while((line = bufReader.readLine()) != null)
                    Result += line;
                return Result;
            } catch (Exception e) { 
                e.printStackTrace(); 
            }
    } 
當然如果你要得到內存流的話也可以直接返回內存流!

 

res/raw和assets的相同點:
1.兩者目錄下的文件在打包後會原封不動的保存在apk包中,不會被編譯成二進制。

   *res/raw和assets的不同點:
1.res/raw中的文件會被映射到R.java文件中,訪問的時候直接使用資源ID即R.id.filename;assets文件夾下的文件不會被映射到R.java中,訪問的時候需要AssetManager類。
2.res/raw不可以有目錄結構,而assets則可以有目錄結構,也就是assets目錄下可以再建立文件夾

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved