閱讀834 返回首頁    go 阿裏雲 go 技術社區[雲棲]


android主題與風格入門

參考

https://www.apkbus.com/forum.php?mod=viewthread&tid=42621

https://www.apkbus.com/forum.php?mod=viewthread&tid=18562

當你設計你的程序的時候,你可以用Style(風格)和Theme(主題)來統一格式化各種屏幕和UI元素。

      風格是一個包含一種或者多種格式化屬性的集合,你可以將其用為一個單位用在布局XML單個元素當中。比如,你可以定義一種風格來定義字號大小和顏色,然後將其用在View元素的一個特定的實例。

      主題是一個包含一種或者多種格式化屬性的集合,你可以將其為一個單位用在應用中所有的Activity當中或者應用中的某個Activity當中。比如,你可以定義一個主題,它為window frame和panel的前景和背景定義了一組顏色,並為菜單定義文字的大小和顏色屬性,你可以將這主題應用在你程序當中所有的Activity裏。

      Style(風格)和Theme(主題)都是資源。你可以用android提供的一些默認的風格和主題資源,你也可以自定義你自己的主題和風格資源。

      如何新建自定義的風格和主題:

      1.在res/values目錄下新建一個名叫 mystyle.xml 的文件,增加一個<resources>根節點。

      2.對每個風格和主題,給<style>element增加一個全局唯一的名字,也可以選擇增加一個父類屬性,在後邊我們可以用這個名字來應用風格,而父類屬性標識了當前風格是繼承於哪個風格。

      3.在<style>元素內部,申明一個或者多個<item>,每一個<item>定義了一個名字屬性,並且在元素內部定義了這個風格的值。

      4.你可以應用在其他XML定義的資源。

      下邊是申明風格的實例:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3.   <style name="AndyStyle" parent="@style/Text">
  4.   <item name="android:textSize">18sp</item>
  5.   <item name="android:textColor">#FF6666</item>
  6.   </style> 
  7. </resources>
複製代碼
  如上所示,你可以用<item>元素來為你的風格定義一組格式化的值。在item當中的名字的屬性可以是一個字符串,一個16進製數所表示的顏色或者是其他資源的引用。

      注意:在<style>元素中的父類屬性。這個屬性讓你可以能夠定義一個資源,當前風格可以從這個資源當中繼承到值。你可以從任何包含這個風格的資源當中繼承此風格。通常上,你的資源應該直接或者間接地繼承Android的標準風格資源。這樣的話,你就隻需要定義你想改變的值。

      在這個例子當中的EditText元素,演示了如何引用一個XML布局文件當中定義的風格:
  1. <EditText
  2.    
  3.    android:layout_width="fill_parent" 
  4.    android:layout_height="wrap_content" 
  5.    android:text="Hello,This is Andy!"/>
複製代碼
Theme(主題)也像風格一樣,主題依然在<style>元素裏邊申明,也可以同樣的方式引用。不同的是你通過在AndroidManifest.xml中定義的<application>和<activity>元素將主題添加到整個程序或者某個Activity,但是主題是不能應用在某個單獨的View裏。


      下邊是聲明主題的一個例子:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3.    <style name="MyTheme">
  4.    <item name="android:windowNoTitle">true</item>
  5.    <item name="android:windowBackground">@drawable/back</item>
  6.    <item name="panelForegroundColor">#FF0000</item>
  7.    <item name="panelBackgroundColor">#FFFFFF</item>
  8.    <item name="panelTextColor">?panelForegroundColor</item>
  9.    <item name="panelTextSize">18</item>
  10.    <item name="menuItemTextColor">?panelTextColor</item>
  11.    <item name="menuItemTextSize">?panelTextSize</item>
  12.    </style>
  13. </resources>
複製代碼
注意:我們用了@符號和?符號來應用資源。@符號表明了我們應用的資源是前邊定義過的(或者在前一個項目中或者在Android框架中)。問號 ? 表明了我們引用的資源的值在當前的主題當中定義過。通過引用在<item>裏邊定義的名字可以做到(panelTextColor用的顏色和panelForegroundColor中定義的一樣)。這種技巧隻能用在XML資源當中。


      在manifest當中設置主題: 為了在程序中所有的Activity當中使用主題,你可以打開AndroidManifest.xml文件,編輯<application>標簽,讓其包含android:theme屬性,值是一個主題的名字,如下:

當你設計你的程序的時候,你可以用Style(風格)和Theme(主題)來統一格式化各種屏幕和UI元素。

      風格是一個包含一種或者多種格式化屬性的集合,你可以將其用為一個單位用在布局XML單個元素當中。比如,你可以定義一種風格來定義字號大小和顏色,然後將其用在View元素的一個特定的實例。

      主題是一個包含一種或者多種格式化屬性的集合,你可以將其為一個單位用在應用中所有的Activity當中或者應用中的某個Activity當中。比如,你可以定義一個主題,它為window frame和panel的前景和背景定義了一組顏色,並為菜單定義文字的大小和顏色屬性,你可以將這主題應用在你程序當中所有的Activity裏。

      Style(風格)和Theme(主題)都是資源。你可以用android提供的一些默認的風格和主題資源,你也可以自定義你自己的主題和風格資源。

      如何新建自定義的風格和主題:

      1.在res/values目錄下新建一個名叫 mystyle.xml 的文件,增加一個<resources>根節點。

      2.對每個風格和主題,給<style>element增加一個全局唯一的名字,也可以選擇增加一個父類屬性,在後邊我們可以用這個名字來應用風格,而父類屬性標識了當前風格是繼承於哪個風格。

      3.在<style>元素內部,申明一個或者多個<item>,每一個<item>定義了一個名字屬性,並且在元素內部定義了這個風格的值。

      4.你可以應用在其他XML定義的資源。

      下邊是申明風格的實例:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3.   <style name="AndyStyle" parent="@style/Text">
  4.   <item name="android:textSize">18sp</item>
  5.   <item name="android:textColor">#FF6666</item>
  6.   </style> 
  7. </resources>
複製代碼
  如上所示,你可以用<item>元素來為你的風格定義一組格式化的值。在item當中的名字的屬性可以是一個字符串,一個16進製數所表示的顏色或者是其他資源的引用。

      注意:在<style>元素中的父類屬性。這個屬性讓你可以能夠定義一個資源,當前風格可以從這個資源當中繼承到值。你可以從任何包含這個風格的資源當中繼承此風格。通常上,你的資源應該直接或者間接地繼承Android的標準風格資源。這樣的話,你就隻需要定義你想改變的值。

      在這個例子當中的EditText元素,演示了如何引用一個XML布局文件當中定義的風格:
  1. <EditText
  2.    
  3.    android:layout_width="fill_parent" 
  4.    android:layout_height="wrap_content" 
  5.    android:text="Hello,This is Andy!"/>
複製代碼
Theme(主題)也像風格一樣,主題依然在<style>元素裏邊申明,也可以同樣的方式引用。不同的是你通過在AndroidManifest.xml中定義的<application>和<activity>元素將主題添加到整個程序或者某個Activity,但是主題是不能應用在某個單獨的View裏。


      下邊是聲明主題的一個例子:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <resources>
  3.    <style name="MyTheme">
  4.    <item name="android:windowNoTitle">true</item>
  5.    <item name="android:windowBackground">@drawable/back</item>
  6.    <item name="panelForegroundColor">#FF0000</item>
  7.    <item name="panelBackgroundColor">#FFFFFF</item>
  8.    <item name="panelTextColor">?panelForegroundColor</item>
  9.    <item name="panelTextSize">18</item>
  10.    <item name="menuItemTextColor">?panelTextColor</item>
  11.    <item name="menuItemTextSize">?panelTextSize</item>
  12.    </style>
  13. </resources>
複製代碼
注意:我們用了@符號和?符號來應用資源。@符號表明了我們應用的資源是前邊定義過的(或者在前一個項目中或者在Android框架中)。問號 ? 表明了我們引用的資源的值在當前的主題當中定義過。通過引用在<item>裏邊定義的名字可以做到(panelTextColor用的顏色和panelForegroundColor中定義的一樣)。這種技巧隻能用在XML資源當中。


      在manifest當中設置主題: 為了在程序中所有的Activity當中使用主題,你可以打開AndroidManifest.xml文件,編輯<application>標簽,讓其包含android:theme屬性,值是一個主題的名字,如下:


      <application android:theme="@style/MyTheme"> ,如果你隻是想讓你程序當中的某個Activity擁有這個主題,那麼你可以修改<activity>標簽。


       Android 中提供了幾種內置的資源,有好幾種主題你可以切換而不用自己寫。比如你可以用對話框主題來使你的Activity看起來像一個對話框。在manifest中定義如下:


  <activity android:theme="@android:style/Theme.Dialog">


      如果你喜歡一個主題,但是想做一些輕微的改變,你隻需要將這個主題添加為父主題。比如我們修改Theme.Dialog主題。我們來繼承Theme.Dialog主題來生成一個新的主題。


       <style name="MyDialogTheme" parent="@android:style/Theme.Dialog">  , 繼承了Theme.Dialog後,我們可以按照我們的要求來調整主題。我們可以修改在Theme.Dialog中定義的每個item元素的值,然後我們在Android Manifest文件中使用MyDialogTheme 而不是Theme.Dialog。


        如果需要的話,我們可以在Activity當中通過使用方法setTheme()來加載一個主題。但必須在初始話任何View之前設置主題。比如,在調用setContentView(View) 和 inflate(int,ViewGroup)方法前。這保證係統將當前主題應用在所有的UI界麵。
      <application android:theme="@style/MyTheme"> ,如果你隻是想讓你程序當中的某個Activity擁有這個主題,那麼你可以修改<activity>標簽。


       Android 中提供了幾種內置的資源,有好幾種主題你可以切換而不用自己寫。比如你可以用對話框主題來使你的Activity看起來像一個對話框。在manifest中定義如下:


  <activity android:theme="@android:style/Theme.Dialog">


      如果你喜歡一個主題,但是想做一些輕微的改變,你隻需要將這個主題添加為父主題。比如我們修改Theme.Dialog主題。我們來繼承Theme.Dialog主題來生成一個新的主題。


       <style name="MyDialogTheme" parent="@android:style/Theme.Dialog">  , 繼承了Theme.Dialog後,我們可以按照我們的要求來調整主題。我們可以修改在Theme.Dialog中定義的每個item元素的值,然後我們在Android Manifest文件中使用MyDialogTheme 而不是Theme.Dialog。


        如果需要的話,我們可以在Activity當中通過使用方法setTheme()來加載一個主題。但必須在初始話任何View之前設置主題。比如,在調用setContentView(View) 和 inflate(int,ViewGroup)方法前。這保證係統將當前主題應用在所有的UI界麵。

最後更新:2017-04-02 17:28:36

  上一篇:go 01.部署NopCommerce時遇到的問題
  下一篇:go sql 腳本