0

我是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>
4

1 回答 1

0

Android 中的样式不会ViewGroup像 HTML 那样从包装/外部视图 ( ) 继承到包装/内部视图。因此,设置android:textColorofAppBaseTheme不会影响操作栏标题文本的样式。

样式定义指出:

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

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

于 2013-05-22T11:56:59.283 回答