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