android风格如何级联?

时间:2013-05-22 11:37:10

标签: android text colors android-actionbar

我是Android开发的新手。而我对Android风格的级联机制感到困惑。如果我想设置actionBar的textColor。我需要这样做。

    <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>

1 个答案:

答案 0 :(得分:0)

Android中的样式不会从包装/外部视图(ViewGroup)继承到包装/内部视图,就像在HTML中一样。 因此,设置android:textColor的{​​{1}}不会影响操作栏标题文字的样式。

样式定义指出:

  • 使用AppBaseTheme作为样式(在这种情况下,作为活动的主题或应用程序的所有活动)时,使用AppBaseTheme作为MyActionBar
  • 使用actionBarStyle作为样式(在本例中,作为操作栏的样式)时,使用MyActionBar作为MyTheme.ActionBar.TitleTextStyle
  • 使用titleTextStyle作为样式(在本例中,作为标题文字的样式)时,请使用MyTheme.ActionBar.TitleTextStyle作为#eee

正如您所说,“当一个样式作为主题应用时,Activity或应用程序中的每个View都将应用它支持的每个样式属性。”但是,父样式(textColor)定义了不同的TextAppearance.Holo.Widget.ActionBar.Title,因此它不符合主题中定义的样式。