更改操作栏的背景而不会丢失所有基本样式

时间:2013-09-10 17:36:30

标签: android styles themes parent

我是Android开发的新手,但我发现很难理解如何使用“res / values / styles.xml”中的XML来设置我的应用程序样式。

在所有教程中,我发现您似乎可以通过在标记中声明“父”字段来继承大部分样式,然后更改您需要的内容。

然而,以这种方式继承的大多数样式都是非公开的,并且最近对样式化Android应用程序的限制使得非公共样式的继承几乎不可能。

我说“差不多”因为我发现解决方案涉及android SDK中“Styles.xml”的大量复制粘贴。 一个明确的例子,在StackOverflow上找到:

http://android-argentina.blogspot.it/2011/08/error-retrieving-parent-for-item.html

应用这些解决方案,我的简单xml:

<style name="MyActionBar" parent="@style/Widget.Holo.Light.ActionBar.Solid.Inverse">
        <item name="android:background">#FF0000</item>
    </style>

成为:

   <!-- Application theme. -->
    <style name="AppTheme" parent="AppBaseTheme">
        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
        <item name="android:actionBarStyle">@style/MyActionBar</item>
    </style>

    <!-- ActionBar styles -->
    <style name="MyActionBar">

        <!--copied from Widget.Holo.Light.ActionBar.Solid.Inverse -->
        <item name="android:titleTextStyle">
@android:style/TextAppearance.Holo.Widget.ActionBar.Title.Inverse
</item>
<item name="android:subtitleTextStyle">
@android:style/TextAppearance.Holo.Widget.ActionBar.Subtitle.Inverse
</item>
<item name="android:background">@android:drawable/ab_solid_dark_holo</item>
<item name="android:backgroundStacked">@android:drawable/ab_stacked_solid_dark_holo</item>
<item name="android:backgroundSplit">@android:drawable/ab_bottom_solid_inverse_holo</item>
<item name="android:divider">@android:drawable/list_divider_holo_dark</item>
<item name="android:progressBarStyle">@android:style/Widget.Holo.ProgressBar.Horizontal</item>
<item name="android:indeterminateProgressStyle">@android:style/Widget.Holo.ProgressBar</item>
<item name="android:progressBarPadding">32dip</item>
<item name="android:itemPadding">8dip</item>

        <!-- custom items -->   
        <item name="android:background">#FF0000</item>
    </style>

此时的资源如“@android:drawable / ab_bottom_solid_inverse_holo”不公开,其他人不能喜欢这个项目(是的,即使它们是“@android:drawable / SOMETHING”)也会导致编译错误,所以这个解决方案几乎无处不在互联网上,但根本无法解决问题。

我只是想在不失去所有基本风格的情况下改变动作栏的背景,必须有一种简单明智的方法。

所以,请帮助,必须有一些我不考虑的愚蠢。

(抱歉我的英语不好)

1 个答案:

答案 0 :(得分:2)

试试这个:

<style name="YourCustomTheme" parent="android:Theme.Holo.Light">
    <item name="android:actionBarStyle">@style/Widget.Holo.ActionBar.XYZ</item>
</style>

<style name="Widget.Holo.ActionBar.XYZ" parent="@android:style/Widget.Holo.ActionBar">
    <item name="android:background">@color/aw_blue</item>
</style>