2013-05-22 44 views
0

我是新來的android開發。而且我對Android風格的層疊機制感到困惑。如果我想設置一個actionBar的textColor。我需要這樣做。Android風格級聯如何?

<style name="AppBaseTheme" parent="android:Theme.Holo.Light"> 
<!--   API 14 theme customizations can go here. --> 
     <item name="android:actionBarStyle">@style/MyActionBar</item> 
    </style> 

    <!-- style for the action bar backgrounds --> 
    <style name="MyActionBar" parent="@android:style/Widget.Holo.ActionBar"> 
     <item name="android:background">@drawable/border</item>  
     <item name="android:titleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item> 
    </style> 

    <style name="MyTheme.ActionBar.TitleTextStyle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title"> 
    <item name="android:textColor">#eee</item> 
    </style> 

這工作正常!但我很困惑的是爲什麼以下不起作用?

<style name="AppBaseTheme" parent="android:Theme.Holo.Light"> 
<!--   API 14 theme customizations can go here. --> 
     <item name="android:actionBarStyle">@style/MyActionBar</item> 
     <item name="android:textColor">#eee</item> 
    </style> 

回答

0

樣式Android中不從包裝/外視圖(ViewGroup)到包裹/內視圖,像在HTML繼承了。 因此,設置AppBaseThemeandroid:textColor不會影響操作欄的標題文本樣式。

樣式定義指出:

  • 當使用AppBaseTheme的風格(在這種情況下,作爲活動的主題,或應用程序的所有活動),使用MyActionBar作爲actionBarStyle
  • 當使用MyActionBar的風格(在這種情況下,操作欄的風格),使用MyTheme.ActionBar.TitleTextStyle作爲titleTextStyle
  • 當使用MyTheme.ActionBar.TitleTextStyle的風格(在這種情況下,作爲標題文本的樣式),使用#eee作爲textColor

正如您所說的,「當將樣式應用爲主題時,活動或應用程序中的每個視圖都將應用它支持的每個樣式屬性。」但是,父風格(TextAppearance.Holo.Widget.ActionBar.Title)定義了不同的android:textColor,因此它不符合在主題中定義的風格。

+0

感謝您的快速回復。今天,我再次仔細閱讀官方開發文檔,並發現這些:--------「主題是一種適用於整個活動或應用程序的風格,而不是單個視圖(如上例所示)。樣式應用爲主題,活動或應用程序中的每個視圖都會應用它支持的每個樣式屬性。例如,您可以將相同的CodeFont樣式應用爲活動的主題,然後該活動中的所有文本將具有綠色等寬字體。「而操作欄可能是一個「特例」,我需要詳細閱讀它。 – SalutonMondo