標籤:
目錄(?)[-]
 - 靜態格式
 
 - 代碼中設定
 
 - Style
 
 - Theme
 
靜態格式
在res/values中設定靜態Style,在資源中設定靜態Style可使用的HTML格式有<i> <u> <b> <sup> <sub> <strike> <big> <small> <monospace>。
<string name="ui_styleText_1"><i>Static</i> style <u>in</u> a <b>TextView</b>. <strike>strike</strike></string>
我們在XML中進行實驗,也順帶看看其他效果的設定。
<TextView android:layout_width="match_parent"
    android:layout_height="wrap_content" 
    android:autoLink="web|email" 
    android:text="Please visit www.androidbook.com for more help on using Android."
    android:minLines="3" 
    android:typeface="serif" /> 
<TextView android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/ui_styleText_1"/>
代碼中設定
在代碼中通過Spannable中設定Style。如所示。對於EditText,我們在xml中設定了 android:inputType="text|textAutoCorrect|textAutoComplete|textMultiLine",故中出現紅色底線,表示拼字錯誤。
//TextView需要先指定BufferType,才能通過getText( )擷取spannable對象。
TextView tv = (TextView)findViewById(R.id.ui_style_tv); 
tv.setText("This text is stored in a Spannable", TextView.BufferType.SPANNABLE); 
Spannable spanTv = (Spannable)tv.getText();  
//通過setSpan(),對text中的某個範圍,本例0~7的字元進行處理 
spanTv.setSpan(new BackgroundColorSpan(Color.RED), 0, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
spanTv.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC),0, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
//EditText可以直接擷取通過getText()擷取Spannable對象 
EditText et = (EditText)findViewById(R.id.ui_style_ed); 
et.setText("Styling the content of an EditText dynamically"); 
Spannable spanEt = (Spannable)et.getText();  
spanEt.setSpan(new BackgroundColorSpan(Color.RED), 0, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spanEt.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC), 0, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Style
如果相同的格式用於多個控制項,每個控制項都寫一遍,很麻煩,可以定義成為style,並在控制項中設定style。style在res/values/中定義,如下所示。
<?xml version="1.0" encoding="utf-8"?> 
<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 例子1:定義名字為“MyErrorText”的style, 設定顏色和字型,還順帶設定了width和height,不用每次寫這麼煩 -->
    <style name="MyErrorText"> 
        <item name="android:layout_width">match_parent</item> 
        <item name="android:layout_height">wrap_content</item> 
        <item name="android:textColor">#FF0000</item> 
        <item name="android:typeface">monospace</item> 
    </style>  
    <!-- 例子2:style樹狀階層:style提供一個很方便的階層,可以一層一層地通過“.”進行擴充  -->
    <style name="MyErrorText.Danger"> 
        <item name="android:textStyle">bold</item> 
    </style> 
    <!-- 例子3:對於擴充android內建的style,不能採用“.”,而是用parent。android內建的style可以在sdk\platforms\android-xx\data\res\values\styles.xml 查看 -->
    <style name="MyText" parent="@android:style/TextAppearance.Small">
        <item name="android:textColor">#FF00FF</item> 
    </style>    
</resources>
layout xml檔案的相關內容如下:
    <-- 調用style,和其他屬性不同,前面沒有android:  --> 
    <TextView style="@style/MyErrorText" 
        android:text="Error: No Error here." /> 
    <-- 調用居於階層的style --> 
     <TextView style="@style/MyErrorText.Danger" 
        android:text="Fatal Error: Test...." /> 
     <-- 調用android系統自訂的style--> 
    <TextView style="@android:style/TextAppearance.Holo" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:text="Android Default Style : TextAppearance.Holo" /> 
    <-- 測試style的例子3的效果 --> 
    <TextView style="@style/MyText" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:text="Information: my text" /> 
    <-- 對於系統定義的Theme,我們可以只使用其中的某個屬性  --> 
    <EditText android:id="@+id/ui_style_ed2" 
         android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:textColor="?android:textColorSecondary" 
        android:text="@string/ui_styleTest"/>
Theme
在上面的例子中已經提到theme。使用style可以避免在逐個控制項中進行控制項屬性的描述,如果修改可以只在一個地方進行修改,提供了很大的便捷,但是仍需要在每個控制項中進行style指定。如果希望屬效能夠在整個activity或者整個application都實用,可以採用theme。theme和style概念上很相似,在定義屬性時,一樣採用style在res/vaules/的xml檔案中描述。如下面的例子。android系統自訂的theme在sdk\platforms\android-xx\data\res\values\themes.xml中定義。
<style name="MyTheme" parent="@android:style/Theme"> 
    <item name="android:textColor">#666666</item> 
</style> 
Theme在AndroidManifest.xml中設定。
對於activity: 
    <activity ... android:theme="@style/MyTheme" ... /> 
對於application: 
   <application .... android:theme="@style/MyTheme" ... />
相關連結: 我的Android開發相關文章
【轉】Pro Android學習筆記(二四):使用者介面和控制(12):Style和Theme