即興的靈感

          思維是一種藝術(shù); 藝術(shù)需要靈感。

          博客好友

          最新評論

          Android開發(fā)中的風(fēng)格與主題的區(qū)別與應(yīng)用

          Android xml風(fēng)格和主題文件的編寫,是涉及到整個(gè)程序界面美觀的因素之一。較好的應(yīng)用風(fēng)格和主題,可以實(shí)現(xiàn)美觀而統(tǒng)一的界面,這就猶如Web開發(fā)中的CSS。

              Styles和Themes都是資源,存放在res/values文件夾下。
              什么是Style,什么是Theme?
              Style:是一個(gè)包含一種或者多種格式化屬性的集合,我們可以將其用為一個(gè)單位用在布局XML單個(gè)元素當(dāng)中。比如,我們可以定義一種風(fēng)格來定義文本的字號(hào)大小和顏色,然后將其用在View元素的一個(gè)特定的實(shí)例。
              Theme:是一個(gè)包含一種或者多種格式化屬性的集合,我們可以將其為一個(gè)單位用在應(yīng)用中所有的Activity當(dāng)中或者應(yīng)用中的某個(gè)Activity當(dāng) 中。比如,我們可以定義一個(gè)Theme,它為window frame和panel 的前景和背景定義了一組顏色,并為菜單定義可文字的大小和顏色屬性,可以將這個(gè)Theme應(yīng)用在你程序當(dāng)中所有的Activity里。

              Style和Theme的XML文件結(jié)構(gòu),對每一個(gè)Styles和Themes,給<style>元素增加一個(gè)全局唯一的名字,也可以選擇增加一個(gè)父類屬性。在后邊我們可以用這個(gè)名字來應(yīng)用風(fēng)格,而父類屬性標(biāo)識(shí)了當(dāng)前風(fēng)格是繼承于哪個(gè)風(fēng)格。在<style>元素內(nèi)部,申明一個(gè)或者多個(gè)<item>,每一個(gè)<item>定義了一個(gè)名字屬性,并且在元素內(nèi)部定義了這個(gè)風(fēng)格的值。

              風(fēng)格
              1.在res/values 目錄下新建一個(gè)名叫style.xml的文件。

              2.對每一個(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定義的資源。

              下面SDK提供的Style的例子:(SDK提供的程序會(huì)有style/Text找不到的錯(cuò)誤,目前還不知道怎么解決)
              <?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>

             上面的樣式可以用在單個(gè)view中如:
             <EditText id=”@+id/text1″
              style=”@style/mytext”
              android:layout_width=”fill_parent”
              android:layout_height=”wrap_content”
              android:text=”Hello, World!” />

              現(xiàn)在這個(gè)EditText組件的所表現(xiàn)出來的風(fēng)格就為我們在上邊的XML文件中所定義的那樣。

              編寫一個(gè)簡單的Style:
              <?xml version=”1.0″ encoding=”utf-8″?>
              <resources>
           <style name=”SpecialText” >
                  <item name=”android:textSize”>18sp</item>
                  <item name=”android:textColor”>#EC9237</item>
              </style>
              <style name=”SpecialText2″ >
                  <item name=”android:textSize”>26sp</item>
                  <item name=”android:textColor”>#FF7F7C</item>
                  <item name=”android:fromAlpha”>0.0</item>
            <item name=”android:toAlpha”>0.0</item>
              </style>
              </resources>

              應(yīng)用的編寫:
              <TextView 
           style=”@style/SpecialText2″
              android:layout_width=”fill_parent”
              android:layout_height=”wrap_content”
              android:text=”@string/hello”
              />
              <EditText android:text=”@+id/EditText01″
           style=”@style/SpecialText”
           android:id=”@+id/EditText01″
           android:layout_width=”wrap_content”
           android:layout_height=”wrap_content”></EditText>

          主題
              就像Style一樣,Theme依然在<style>元素里邊申明,也是以同樣的方式引用。不同的是通過在Android Manifest中定義的<application>和<activity>元素將主題添加到整個(gè)程序或者某個(gè) Activity,但是主題是不能應(yīng)用在某一個(gè)單獨(dú)的View里。

              下邊是SDK中主題的一個(gè)例子:(SDK提供的程序會(huì)有Error:no resource found that matches the given name: panelForegroundColor等錯(cuò)誤,目前還不知道怎么解決這些錯(cuò)誤)
              <?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)中

              在程序中使用主題的方法:
              protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setTheme(android.R.style.Theme_Light);   
                setContentView(R.layout.linear_layout_3);
              }

              在mainfest.xml中應(yīng)用主題:
              為了在成用當(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)簽。

              編寫的簡單的一個(gè)Theme:
              <?xml version=”1.0″ encoding=”utf-8″?>
              <resources>
                <style name=”CustomTheme” parent=”android:Theme.Black”>       
                  <item name=”android:windowNoTitle”>true</item>
                  <item name=”android:testSize”>14sp</item>
                  <item name=”android:textColor”>#FFFF0000</item>
                </style>
              </resources>

              Android中提供了幾種內(nèi)置的資源,有好幾種主題你可以切換而不用自己寫。比如你可以用對話框主題來讓你的Activity看起來像一個(gè)對話框。在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元素的值,然后我們在Android Manifest 文件中使用CustomDialogTheme 而不是Theme.Dialog 。Article



          ?
          鳳凰涅槃/浴火重生/馬不停蹄/只爭朝夕
          ???? 隱姓埋名/低調(diào)華麗/簡單生活/完美人生

          posted on 2010-10-28 09:06 poetguo 閱讀(1833) 評論(0)  編輯  收藏 所屬分類: Android

          主站蜘蛛池模板: 长岭县| 江川县| 屏东县| 秭归县| 镇安县| 太原市| 海伦市| 青海省| 通城县| 盐池县| 铅山县| 舟曲县| 平舆县| 敦煌市| 灯塔市| 邵东县| 天峨县| 谢通门县| 榆树市| 苍山县| 全州县| 石屏县| 长寿区| 静宁县| 揭西县| 淅川县| 尉氏县| 娄烦县| 布拖县| 新化县| 买车| 保靖县| 安吉县| 南充市| 永安市| 雷州市| 灵台县| 临猗县| 富锦市| 衡阳市| 灵石县|