Android編程應(yīng)用風(fēng)格和主題詳解
本文實(shí)例講述了Android編程應(yīng)用風(fēng)格和主題。分享給大家供大家參考,具體如下:
當(dāng)你設(shè)計(jì)你的程序的時(shí)候,你可以用風(fēng)格和主題來統(tǒng)一格式化各種屏幕和UI元素。
風(fēng)格是一個(gè)包含一種或者多種格式化屬性的集合,你可以將其用為一個(gè)單位用在布局XML單個(gè)元素當(dāng)中。比如,你可以定義一種風(fēng)格來定義文本的字號(hào)大小和顏色,然后將其用在View元素的一個(gè)特定的實(shí)例。
主題是一個(gè)包含一種或者多種格式化屬性的集合,你可以將其為一個(gè)單位用在應(yīng)用中所有的Activity當(dāng)中或者應(yīng)用中的某個(gè)Activity當(dāng)中。比如,你可以定義一個(gè)主題,它為window frame和panel 的前景和背景定義了一組顏色,并為菜單定義可文字的大小和顏色屬性,你可以將這個(gè)主題應(yīng)用在你程序當(dāng)中所有的Activity里。
風(fēng)格和主題都是資源。你可以用android提供的一些默認(rèn)的風(fēng)格和主題資源,你也可以自定義你自己的主題和風(fēng)格資源。
如何新建自定義的風(fēng)格和主題:
1.在res/values 目錄下新建一個(gè)名叫style.xml的文件。增加一個(gè)<resources>根節(jié)點(diǎn)。
2.對(duì)每一個(gè)風(fēng)格和主題,給<style>element增加一個(gè)全局唯一的名字,也可以選擇增加一個(gè)父類屬性。在后邊我們可以用這個(gè)名字來應(yīng)用風(fēng)格,而父類屬性標(biāo)識(shí)了當(dāng)前風(fēng)格是繼承于哪個(gè)風(fēng)格。
3.在<style>元素內(nèi)部,申明一個(gè)或者多個(gè)<item>,每一個(gè)<item>定義了一個(gè)名字屬性,并且在元素內(nèi)部定義了這個(gè)風(fēng)格的值。
4.你可以應(yīng)用在其他XML定義的資源。
一、風(fēng)格
下邊是一個(gè)申明風(fēng)格的實(shí)例:
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="SpecialText" parent="@style/Text"> <item name="android:textSize">18sp</item> <item name="android:textColor">#008</item> </style> </resources>
如上所示,你可以用<item>元素來為你的風(fēng)格定義一組格式化的值。在Item當(dāng)中的名字的屬性可以是一個(gè)字符串,一個(gè)16進(jìn)制數(shù)所表示的顏色或者是其他資源的引用。
注意在<style>元素中的父類屬性。這個(gè)屬性讓你可以能夠定義一個(gè)資源,當(dāng)前風(fēng)格可以從這個(gè)資源當(dāng)中繼承到值。你可以從任何包含這個(gè)風(fēng)格的資源當(dāng)中繼承此風(fēng)格。通常上,你的資源應(yīng)該一直直接或者間接地繼承Android的標(biāo)準(zhǔn)風(fēng)格資源。 這樣的話,你就只需要定義你想改變的值。
在這個(gè)例子當(dāng)中的EditText元素,演示了如何引用一個(gè)XML布局文件當(dāng)中定義的風(fēng)格:
<EditText id="@+id/text1" style="@style/SpecialText" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Hello, World!" />
現(xiàn)在這個(gè)EditText組件的所表現(xiàn)出來的風(fēng)格就為我們?cè)谏线叺腦ML文件中所定義的那樣。
二、 主題
就像風(fēng)格一樣,主題依然在<style>元素里邊申明,也是以同樣的方式引用。不同的是你通過在Android Manifest中定義的<application>和<activity>元素將主題添加到整個(gè)程序或者某個(gè)Activity,但是主題是
不能應(yīng)用在某一個(gè)單獨(dú)的View里。
下邊是申明主題的一個(gè)例子:
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="CustomTheme"> <item name="android:windowNoTitle">true</item> <item name="windowFrame">@drawable/screen_frame</item> <item name="windowBackground">@drawable/screen_background_white</item> <item name="panelForegroundColor">#FF000000</item> <item name="panelBackgroundColor">#FFFFFFFF</item> <item name="panelTextColor">?panelForegroundColor</item> <item name="panelTextSize">14</item> <item name="menuItemTextColor">?panelTextColor</item> <item name="menuItemTextSize">?panelTextSize</item> </style> </resources>
注意我們用了@符號(hào)和?符號(hào)來應(yīng)用資源。@符號(hào)表明了我們應(yīng)用的資源是前邊定義過的(或者在前一個(gè)項(xiàng)目中或者在Android 框架中)。問號(hào)?表明了我們引用的資源的值在當(dāng)前的主題當(dāng)中定義過。通過引用在<item>里邊定義的名字可以做到(panelTextColor 用的顏色和panelForegroundColor中定義的一樣)。這種技巧只能用在XML資源當(dāng)中。
1. 在manifest當(dāng)中設(shè)置主題
為了在成用當(dāng)中所有的Activity當(dāng)中使用主題,你可以打開AndroidManifest.xml 文件,編輯<application>標(biāo)簽,讓其包含android:theme屬性,值是一個(gè)主題的名字,如下:
<application android:theme="@style/CustomTheme">
如果你只是想讓你程序當(dāng)中的某個(gè)Activity擁有這個(gè)主題,那么你可以修改<activity>標(biāo)簽。
Android中提供了幾種內(nèi)置的資源,有好幾種主題你可以切換而不用自己寫。比如你可以用對(duì)話框主題來讓你的Activity看起來像一個(gè)對(duì)話框。在manifest中定義如下:
<activity android:theme="@android:style/Theme.Dialog">
如果你喜歡一個(gè)主題,但是想做一些輕微的改變,你只需要將這個(gè)主題添加為父主題。比如我們修改Theme.Dialog主題。我們來繼承Theme.Dialog來生成一個(gè)新的主題。
<style name="CustomDialogTheme" parent="@android:style/Theme.Dialog">
繼承了Theme.Dialog后,我們可以按照我們的要求來調(diào)整主題。我們可以修改在Theme.Dialog中定義的每個(gè)item元素的值,然后我們?cè)贏ndroid Manifest 文件中使用CustomDialogTheme 而不是Theme.Dialog 。
2. 在程序當(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);
}
如果你打算在程序代碼中來加載主界面的主題,那么需要注意主題當(dāng)中不能包括任何系統(tǒng)啟動(dòng)這個(gè)Activity所使用的動(dòng)畫,這些動(dòng)畫將在程序啟動(dòng)前顯示。在很多情況下,如果你想將主題應(yīng)用到你的主界面,在XML中定義似乎是一個(gè)更好的辦法。
更多關(guān)于Android相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Android滾動(dòng)條與滾動(dòng)操作技巧總結(jié)》、《Android圖形與圖像處理技巧總結(jié)》、《Android開發(fā)入門與進(jìn)階教程》、《Android調(diào)試技巧與常見問題解決方法匯總》、《Android多媒體操作技巧匯總(音頻,視頻,錄音等)》、《Android基本組件用法總結(jié)》、《Android視圖View技巧總結(jié)》、《Android布局layout技巧總結(jié)》及《Android控件用法總結(jié)》
希望本文所述對(duì)大家Android程序設(shè)計(jì)有所幫助。
- Android主題切換之探究白天和夜間模式
- 基于android樣式與主題(style&theme)的詳解
- Android中應(yīng)用界面主題Theme使用方法和頁(yè)面定時(shí)跳轉(zhuǎn)應(yīng)用
- Android 設(shè)置主題實(shí)現(xiàn)點(diǎn)擊波紋效果的示例
- 分析Android多主題顏色的相關(guān)問題
- Android入門教程之創(chuàng)建樣式與主題
- android仿iphone主題效果的主菜單
- Android實(shí)現(xiàn)換膚的兩種思路分析
- Android編程實(shí)現(xiàn)換膚功能實(shí)例
- Android開發(fā)實(shí)現(xiàn)切換主題及換膚功能示例
相關(guān)文章
Flutter使用?input?chip?標(biāo)簽組件示例詳解
這篇文章主要為大家介紹了Flutter使用?input?chip?標(biāo)簽組件示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
Android實(shí)現(xiàn)動(dòng)畫效果的自定義下拉菜單功能
這篇文章主要介紹了Android實(shí)現(xiàn)動(dòng)畫效果的自定義下拉菜單功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02
Android實(shí)現(xiàn)基本功能的新聞應(yīng)用
這篇文章主要介紹了一個(gè)簡(jiǎn)易功能的Android新聞應(yīng)用實(shí)現(xiàn)流程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-12-12
Android自定義控件實(shí)現(xiàn)滑動(dòng)開關(guān)效果
這篇文章主要為大家詳細(xì)介紹了Android自定義控件實(shí)現(xiàn)滑動(dòng)開關(guān)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-07-07
一款不錯(cuò)的android6.0、7.0權(quán)限管理器推薦
下面小編就為大家分享一篇一款不錯(cuò)的android6.0、7.0權(quán)限管理器推薦,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-01-01
Android編程實(shí)現(xiàn)自定義手勢(shì)的方法詳解
這篇文章主要介紹了Android編程實(shí)現(xiàn)自定義手勢(shì)的方法,結(jié)合實(shí)例形式分析了Android自定義手勢(shì)的功能、相關(guān)函數(shù)與具體實(shí)現(xiàn)步驟,需要的朋友可以參考下2016-10-10
Android實(shí)現(xiàn)3D云標(biāo)簽效果
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)3D云標(biāo)簽效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05

