Android學習筆記(三九):資源resource(下)

來源:互聯網
上載者:User

在上一次學習筆記中,學習了XML檔案的解析,實際上一些簡單的activity屬性,一些簡單的資訊,我們也可以放入xml檔案中,可以直接放入res/vaules,由系統來進行解析,而無須使用XmlPullParser來自己分析。

Dimension

用於字型大小,間距pading等等。常用的尺寸大小詳細見Android 學習筆記(十四):Activity-AutoCompleteTextView,一般我們使用dip/dp和sp,因為和in(inch),mm,以及px(像素點)不同,它和物理螢幕尺寸大小,像素密度無關。

在res/values下面增加一個xml檔案,名字無所謂:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="thin">10px</dimen>
    <dimen name="fat">36sp</dimen>
</resources>

如果我們在layout檔案中調用:<TextView .... android:textSize="@dimen/fat" />;如果我們在java原始碼中調用:line1.setTextSize(getResources().getDimension(R.dimen.thin));

Color

同樣顏色也可以在resource檔案中設定,顏色的格式為#RGB,#ARGB,#RRGGBB,#AARRGGBB,採用16進位方式。同樣在res/values下任一個xml檔案,寫法如下:

<resources>
    <color name="yellow_orange">#FF5555</color>
    <color name="forest_green">#005500</color>
</resources>

如果我們在layout檔案中調用:<TextView ... android:textColor="@color/forest_green" />;如果我們在java原始碼中調用:line1.setTextColor(getResources().getColor(R.color.yellow_orange));

Array

以前在ListActivity中已經有類似的用法,同樣可以在res/values的xml下面設定數組。方式如下:

<resources>
    <string-array name="cities">
        <item>Philadelphia</item>
        <item>Pittsburgh</item>
        <item>Allentown/Bethlehem</item>
        <item>Erie</item>
    </string-array>
</resources>

在Java原始碼中,可以通過String[] cities =
getResources().getStringArray(R.array.cities)
;來擷取。一個常用的方式是設定List的item,例如setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,cities));

不同情況的處理

對於應用,我們需要為不同對象設定不同處理情況,例如國際語言版本,本地語言版本,此外由於Android的裝置種類繁多,要考慮到螢幕的方向(橫屏、豎屏,支援還是不支援旋轉螢幕),螢幕大小和解析度,是否支援觸控螢幕,是否有鍵盤(數位還是QWERTY),有某其他的輸入裝置(例如D-Pad,就是方向鍵,在feature phone中很常見)。Android處理則這些情況是通過多個資來源目錄,目錄名稱有規定,表示適配不同的情況。

對不同語言的適配處理:放置在res/values/strings.xml中為預設的strings,特定的語言,例如英語、西班牙語,分別對應res/values-en/strings.xml和res/values-es/strings.xml。Android系統會根據系統的語言選擇去自動進行適配,如果沒有特定的語言,則採用預設目錄。values-xx中的xx是ISO 639-1中所定義,中文是“zh”,具體可以在維基百科中查。

語言的處理是比較簡單的,但是在裝置的選擇上就比較複雜,因為組合很多。Android對檔案夾的命名有規則,例如螢幕方向在是否觸控螢幕之前,觸控螢幕在螢幕尺寸之前,例如res/layout-large-port-notouch-qwerty ,res/layout-large-port-stylus-nokeys,res/layout-normal-land-finger-qwerty 等等,這裡的port是portrait,和land(landscape)對應。但是如果我們要為每種可能的排列主要進行處理,幾乎不太可能,我們看看Android選取檔案的一些原則:

一、Android會將不適配的檔案作為候選,例如有一個res/layout-large-port,而當前裝置是普通尺寸,即不適配與-large,因此這個檔案夾將作為候選,如果我們找不到相應的檔案,才會在這裡選擇。記得我們在處理圖片資源的時候,我們見過某個PNG的圖片放置在res/drawable-hdpi,而沒有放置在res/drawable-mdpi,普通尺寸是會先查詢-mdpi,如果沒有,再查詢其他,因此如果你只放置一個圖片資源,放置在哪個檔案夾都是可以調用的。

二、選擇具有最多匹配項,例如有res/layout-large-port-finger-nokeys,和res/layout-port,都匹配,則前者的匹配數目多,則前者優先。

三、如果匹配數目相同,例如res/layout-large-finger-nokeys和res/layout-large-port-nokeys,他們的匹配數目相同,這是按前後的優先順序別,因為port是放置在finger的前面,因此-port具有更高的優先順序別。

根據這些原則,我們並不需要真的將所有的可能進行組合,只需將相關的給出就可以了。

相關連結:
我的Android開發相關文章

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.