1.Style和Theme
Android的style分為兩個(gè)方面:
1.Theme 是針對窗體級別的堪遂,改變窗體樣式
2.Style 是針對窗體元素級別的,改變指定控件或Layout的樣式
Android 系統(tǒng)的themes.xml和style.xml(位于系統(tǒng)源代碼frameworks\base\core\res\res\values\)包含很多系統(tǒng)定義好的style。Style和Theme都是資源喝噪。
1)Style是包含一種或者多種格式化屬性的集合汰现,可以將其作為一個(gè)單位用在布局XML單個(gè)元素中。例如:定義風(fēng)格(定義文字的字號和顏色)君账,然后用在view元素中繁堡。
2)Themeye是包含一種或者多種格式化屬性的集合,可以將其作為一個(gè)單位用所有的Activity或某個(gè)Activity中乡数。例如:定義主題(為Window Frame和Panel的前景和背景定義了一組顏色并為菜單定義了文字的大小和顏色)椭蹄,然后用在Activity中。
2.自定義Style和Theme
自定義Style步驟:
1.在res/values目錄下新建style.xml
2.增加一個(gè)<resource>根節(jié)點(diǎn)净赴,對每一種Style定義name绳矩,也可以增加parent屬性
3.<style>元素內(nèi)部可以有多個(gè)item
例如:
<resource>
<style name="SpecialText" parent="@style/Text">
<item name="android:textSize">20sp</item>
<item name="android:textColor">#0000000<item>
</style>
</resource>
在某個(gè)View中只需 style="@style/SpecialText"即可引用該Style。
自定義Theme 的步驟和自定義Style類似玖翅,不同的是Theme應(yīng)用在Android Manifest中定義的
和元素將主題添加到整個(gè)程序或者某個(gè) Activity翼馆,但是主題是不能應(yīng)用在某一個(gè)單獨(dú)的View里。
<resource>
<style name="CustomTheme">
<item name="android:windowNoTitle">true</item>
<item name="windowFrame">@drawable/screen_frame</item>
<item ame="panelForegroundColor">#FF000000</item>
<item "panelTextColor">?panelForegroundColor</item>
</style>
</resource>
注意我們用了@符號和金度?符號來應(yīng)用資源应媚。@符號表明了我們應(yīng)用的資源是前邊定義過的(或者在前一個(gè)項(xiàng)目中或者在Android 框架中)。問號猜极?表明了我們引用的資源的值在當(dāng)前的主題當(dāng)中定義過中姜。通過引用在里邊定義的名字可以做到(panelTextColor用的顏色和panelForegroundColor中定義的一樣)。這中技巧只能用在XML資源當(dāng)中跟伏。
在manifest當(dāng)中設(shè)置主題
打開AndroidManifest.xml 文件丢胚,編輯標(biāo)簽翩瓜,讓其包含android:theme屬性,值是一個(gè)主題的名字嗜桌,如下:
<application android:theme="@style/CustomTheme"></application>
在程序當(dāng)中設(shè)置主題
如果需要的話奥溺,你可 以在Activity當(dāng)中通過使用方法setTheme()來加載一個(gè)主題。注意骨宠,如果你這么做的話浮定,你應(yīng)該初始化任何View之前設(shè)置主題。比如层亿,在調(diào) 用setContentView(View) 和inflate(int, ViewGroup)方法前桦卒。這保證系統(tǒng)將當(dāng)前主題應(yīng)用在所有的UI界面。例子如下:
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
...
setTheme(android.R.style.Theme_Light);
setContentView(R.layout.linear_layout_3);
}