這份文件談資源由兩個方向分別討論。第一個以資源的類型來討論,分別討論資源的取用方式。第二個方向則討論系統預設資源的取用以及使用者自定資源的方式。一般來說我們建議盡量使用系統預設的資源,系統沒有的才使用自定資源來輔助,這樣可以加快程式的撰寫以及各平台間的相容性。
Android常用資源類型:
- String (字串)
- Layout (面板配置)
- String Array (字串陣列)
- Plurals (一個字串的集合,用來表示數量通常是複數形式)
- Color (顏色)
- Dimension (尺寸)
- Image (圖片)
- Color-Drawable (一個被著色的方型,由xml寫成)
Android系統資源存放於<android-sdk-windows>\platforms\<android version>\data\res 目錄下。初學者最先碰到會使用的應該是...\res\values\attrs.xml 檔案裡面的字型設定還有顏色設定。如果利用Eclipse IDE隨便拉一個TextView控制項,它的屬性如下:
這裡表示這個TextView的文字Style以系統內定的?android:attr/textAppearanceLarge來顯示。定義的資料可以在R.attr裡面找到。定義如下:
如果仔細去追可以在...\res\values\attrs.xml裡面找到
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge" />
public static final int textAppearanceLarge
Since: API Level 1
Text color, typeface, size, and style for "large" text. Defaults to primary text color.
Must be a reference to another resource, in the form "
@[+][package:]type:name
" or to a theme attribute in the form "?[package:][type:]name
".
Constant Value: 16842816 (0x01010040)
如果仔細去追可以在...\res\values\attrs.xml裡面找到
<!-- Text color, typeface, size, and style for "large" text. Defaults to primary text color. -->
<attr name="textAppearanceLarge" format="reference" />
一個 <attr>單元有兩屬性:name以及format。name就是這個<attr>的名字,可以讓他在別的地方被參考到。 format表示這個<attr>是符合哪一種格式。formate可用格式有:
- reference - if it references another resource id (e.g, "@color/my_color", "@layout/my_layout")
- color
- boolean
- dimension
- float
- integer
- string
- fraction
- enum - normally implicitly defined
- flag - normally implicitly defined
舉上面TextView的例子來說,我們可以在...\res\values\attrs.xml裡面找到
<declare-styleable name="ViewGroup_Layout">
.....
<attr name="layout_width" format="dimension">
<enum name="fill_parent" value="-1" />
<enum name="match_parent" value="-1" />
<enum name="wrap_content" value="-2" />
</attr>
.....
這定義"layout_width"是一種"dimension"的屬性,所以在TextView裡面 android:layout_width="wrap_content" 或是 android:layout_width="60dp" 這樣的敘述句就變成有定義。
回到<attr name="textAppearanceLarge" format="reference" />, reference 表示textAppearanceLarge 可以在...\res\values\themes.xml 裡面找到它的定義。
<style name="Theme">
....
....
<item name="textAppearanceLarge">@android:style/TextAppearance.Large</item>
....
....
繼續往下追可以在...\res\values\style.xml裡面找到
<style name="TextAppearance.Large">
<item name="android:textSize">22sp</item>
</style>
在Android程式設計個過程,我們提供程式碼追蹤的過程但不建議更改這些設定值。這裡我們也了解到textAppearanceLarge其實是一個Style設定,所以程式碼寫成
android:textAppearance="?android:attr/textAppearanceLarge" 或是
android:textAppearance="?android:attr/textAppearanceLarge" 或是
sytle="?android:attr/textAppearanceLarge" 實際上是一樣的。
Android 常用系統預設文字大小以及顏色
- 文字大小 android:textAppearance="?android:attr/textAppearanceLarge"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textAppearance="?android:attr/textAppearanceSmall"
- 字體顏色 android:textColor="?android:attr/textColorPrimary"
android:textColor="?android:attr/textColorSecondary"
android:textColor="?android:attr/textColorTertiary"
android:textColor="?android:attr/textColorPrimaryInverse"
android:textColor="?android:attr/textColorSecondaryInverse"
沒有留言:
張貼留言