Android 用户界面---样式和主题(Styles and Themes)(二)
樣式屬性
理解了樣式是如何定義的之后,就需要學習<item>元素都定義了那些有效的樣式屬性類型。你可能已經熟悉了像layout_width和textColor屬性,但是還有更多的可以使用的樣式屬性。
查找應用于指定的View對象的最好的地方是對應的類參考,類參考中會列出所有的XML所支持的屬性。例如,在TextView類的XML屬性表中列出了所有的能夠用于定義TextView元素(或者它的一個子類)的樣式。在這個類參考中列出了一個屬性:android:inputType,這個屬性通常被放在<EditText>元素中,如:
<EditText
? ? android:inputType="number"
? ? ... />
可以通過給EditText元素創建以下的樣式定義來替代上例中android:inputType屬性聲明:
<stylename="Numbers">
? <itemname="android:inputType">number</item>
? ...
</style>
因此對于布局的XML可以使用以下方法來聲明:
<EditText
? ? style="@style/Numbers"
? ? ... />
這個簡單的例子看上去有很多工作,但是當你要添加更多的樣式屬性,并且要在各種地方復用這些樣式時,就會省去很多工作。
對于所有可用的樣式屬性,請參考R.attr類,要記住的是不是所有的View對象都接受R.attr類中定義的所有的相同的樣式屬性,因此,通常應該給特定View對象指定其支持的樣式屬性。但是,對于應用于一個View對象上的所有其不支持的樣式屬性,這個View對象只會使用它們所支持的那些屬性,并簡單的把不支持的屬性忽略。
但是,有些樣式屬性不被任何View對象支持,只能用于主題。這些樣式屬性應用與整個窗口,不真對任何View類型。例如,能夠隱藏應用標題的主題樣式屬性,隱藏狀態欄或改變窗口背景的樣式屬性。這些樣式屬性不屬于任何View對象。要查看這些僅用于主題的樣式屬性,請參考R.attr類中用window開始的屬性。例如,windowNoTitle和windowBackground樣式只會影響使用了這樣的主題的Activity或應用程序。
注意:在每個<item>元素的聲明中name屬性的前綴名不要忘記使用android:命名空間,如<item name=”android:inputType”>
給UI應用樣式和主題:
有以下兩種方式來設置樣式:
1.?????? 通過給XML中布局的一個View元素添加style屬性,來給一個單獨的View對象設置樣式;
2.?????? 或者,通過給Android清單文件中的<activity>或<application>元素添加android:theme屬性,來給整個Activity或應用程序添加主題。
當把一個樣式應用于布局中單一的View對象時,這個樣式定義的屬性只會用于這個View對象。如果樣式被用于一個ViewGroup對象,那么其中的View子對象不會繼承這個樣式屬性---樣式只會用于直接引用該樣式的元素。但是,通過樣式主題,可以把一個樣式應用與所有的View元素。
要把樣式定義用于主題,就必須把這個樣式用于Android清單文件中的<activity>或<application>元素。這么做的時候,Activity或應用程序中的每個View對象都會應用它們所支持的屬性。例如,給一個Activity應用之前定義的CodeFont樣式,那么這個Activity中支持這個文本樣式屬性的所有View元素都會使用這個樣式,不支持這個屬性的任何View對象會忽略它。
給View對象應用一個樣式
以下是給XML布局中的一個View對象設置樣式的方法:
<TextView
? ? style="@style/CodeFont"
? ? android:text="@string/hello"/>
這樣TextView元素將會使用CodeFont中定義的樣式。
注意:style屬性不使用android:命名空間前綴。
給Activity或應用程序應用主題
要給應用程序的所有Activity設置主題,就要在AndroidManifest.xml文件的<application>元素中包含android:them屬性,如:
<applicationandroid:theme="@style/CustomTheme">
如果要把一個主題只用于應用程序中的一個Activity,那么就要在<activity>元素中添加android:theme屬性。
跟Android提供的其他內置資源一樣,有一些系統預定義的主題可以使用,因此要避免自己編寫它們。例如,可以使用Dialog主題,讓Activity的顯示效果像一個對話框:
<activityandroid:theme="@android:style/Theme.Dialog">
如果要讓背景透明,就使用透明的主題:
<activityandroid:theme="@android:style/Theme.Translucent">
如果要使用一個主題,但需要調整,那么可以把這個主題作為定制主題的父主題。例如,可以修改傳統的亮度主題,并添加自己想要的顏色:
<colorname="custom_theme_color">#b0b0ff</color>
<stylename="CustomTheme"parent="android:Theme.Light">
? ? <itemname="android:windowBackground">@color/custom_theme_color</item>
? ? <itemname="android:colorBackground">@color/custom_theme_color</item>
</style>
上例中需要的顏色是用獨立的資源提供的,這是因為android:windowBackground屬性僅支持對另一個資源的引用,跟android:colorBackground不一樣,它不能接收顏色值的設定。
現在可以在Android清單文件內使用CustomTheme來替代Theme.Light。
基于平臺版本來選擇主題
比較新的Android版本中附帶了一些應用程序可以利用的主題,并在這些平臺上運行時,可能要使用這些主題,同時依然要兼容舊的版本。基于不同的平臺版本,通過選擇定制主題所使用的資源在不同的父主題之間的切換來達到兼容的目的。
例如,以下是用標準的平臺默認的亮度主題聲明的一個簡化的定制主題,它被放在res/values文件夾下的一個XML文件中(通常是res/values/styles.xml):
<stylename="LightThemeSelector"parent="android:Theme.Light">
? ? ...
</style>
當應用程序運行在Android3.0(API級別11)或更高的版本上時,針對這個主題要使用比較新的holographic主題,所以,要在res/values-v11的文件夾下的一個XML文件中放入一個可選的主題聲明,把它的父主題設置為holographic主題:
<stylename="LightThemeSelector"parent="android:Theme.Holo.Light">
? ? ...
</style>
現在就可以像平常一樣使用這個LightThemSelector主題了,如果應用程序運行在Android3.0或更高的版本,就會自動的切換到holographic主題。
在R.styleable.Theme類中可以找到用于主題的標準屬性列表。
有關提供可選資源的更多信息,如基于平臺版本或其他設備配置的主題和布局,可以查看“Providing Resources”文檔。
http://developer.android.com/guide/topics/resources/providing-resources.html
使用平臺樣式和主題
Android平臺提供了一個大的用于應用程序的樣式和主題集合。可以在R.style類中找到所有可用的樣式。要使用其中列出的樣式,就要用一個前綴來替換在樣式名中的所有下劃線。如,可以用”@android:style/Theme.NoTitleBar”來替代Theme_NoTitleBar。
但是,R.style類文檔沒有完整的描述樣式,因此查看實際的使用這些樣式和主題的源代碼會更好的幫助理解提供的每種樣式屬性。為了更好的引用Android的樣式和主題,請看下列源代碼:
1.??Android樣式(styles.xml)
2.? Android主題(themes.xml)
這兩個文件會通過例子幫助你設計,例如,在Android主題的源代碼中,能夠找到<style name=”Theme.Dialog”>聲明。在這個定義中,可以看到所有的Android框架使用的對話框樣式屬性。
?
?
轉載于:https://www.cnblogs.com/andriod-html5/archive/2012/03/31/2539436.html
總結
以上是生活随笔為你收集整理的Android 用户界面---样式和主题(Styles and Themes)(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: django 函数装饰器 变为 类装饰器
- 下一篇: [转载]使用Vitamio打造自己的An