Actionbar用错误的背景填充透明图标像素

时间:2013-07-25 15:21:17

标签: android actionbarsherlock

我正在使用actionbar sherlock。我有一个透明像素的图标。但是当我运行我的应用程序时,似乎“某些东西”正在用主题中的主背景替换这些透明像素,而不是动作栏背景。

如果将主背景指定为@color或@drawable(9补丁)并不重要,但在后一种情况下(这实际上是我想要的),还有一个额外的怪癖,即几个像素的主背景9补丁出现在操作栏的右边(!)手边。去图。

我不知道这里发生了什么。只是如果我从主样式中删除背景项,操作栏看起来应该是这样(这似乎是问题)。

之前有其他人见过这种行为吗?谢谢你看看!

我将在下面粘贴我的style.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>

<declare-styleable name="ViewPagerIndicator">
    <attr name="vpiSubTabPageIndicatorStyle" format="reference"/>
</declare-styleable>

<style name="Theme.StandBy" parent="Theme.Sherlock.Light.DarkActionBar">

    <item name="vpiTabPageIndicatorStyle">@style/CustomTabPageIndicator</item>
    <item name="vpiSubTabPageIndicatorStyle">@style/CustomSubTabPageIndicator</item>
    <item name="android:actionBarStyle">@style/Theme.StandBy.App.ActionBar</item>
    <item name="actionBarStyle">@style/Theme.StandBy.App.ActionBar</item>

<!-- ------------------------------------------ ->
<!-- I tried both of these, but can't get transparent pixels in my icon to work --->
<!-- when I use the 9 patch (frg_background) in stead of a plain color, there -->
<!-- are extra artefacts in that some of the 9 patch pixels end up on the righthand -->
<!-- side of the action bar -->
    <!--<item name="android:background">@drawable/frg_background</item>
    <item name="background">@drawable/frg_background</item>-->
  <item name="android:background">@color/cream</item>
  <item name="background">@color/cream</item>
<!-- ------------------------------------------ ->
</style>

<style name="Theme.StandBySubTab" parent="Theme.Sherlock.Light.DarkActionBar">
    <item name="vpiTabPageIndicatorStyle">@style/CustomSubTabPageIndicator</item>
</style>

<style name="Theme.StandBy.App.ActionBar" parent="Widget.Sherlock.ActionBar">
    <!--
        Both `android:xyz` and `xyz` need to be set to support 4.x and 2.x devices.
    -->
    <item name="android:displayOptions">showHome</item>
    <item name="displayOptions">showHome</item>
    <item name="android:background">@drawable/bar</item>
    <item name="background">@drawable/bar</item>
</style>

<!-- top tab style -->
<style name="CustomTabPageIndicator" parent="Widget.TabPageIndicator">
    <item name="android:background">@drawable/tab_background</item>
    <item name="android:textAppearance">@style/CustomTabPageIndicator.Text</item>
    <item name="android:divider">@drawable/tab_divider</item>
    <item name="android:showDividers">middle</item>
    <item name="android:paddingLeft">4dp</item>
    <item name="android:paddingRight">4dp</item>
</style>
<style name="CustomTabPageIndicator.Text">
    <item name="android:textColor">@color/tab_text</item>
    <item name="android:textSize">10sp</item>
    <item name="android:textStyle">bold</item>
</style>

<!-- sub tab style -->
<style name="CustomSubTabPageIndicator" parent="Widget.TabPageIndicator">
    <item name="android:background">@drawable/sub_background</item>
    <item name="android:textAppearance">@style/CustomSubTabPageIndicator.Text</item>
    <item name="android:paddingLeft">4dp</item>
    <item name="android:paddingRight">4dp</item>
</style>
<style name="CustomSubTabPageIndicator.Text">
    <item name="android:textColor">@color/sub_text</item>
    <item name="android:textSize">10sp</item>
    <item name="android:textStyle">bold</item>
</style>

</resources>

编辑:因为如果我没有在我的主要风格(Theme.StandBy)中指定backgroundandroid:background,问题就消失了,我想到我可能会问错误的问题。放置这些项目的目的是为我的所有片段(标签内容)指定默认背景。这有效,但有我上面提到的不必要的副作用。我应该以另一种方式这样做吗?谢谢你的任何建议!

1 个答案:

答案 0 :(得分:0)

当视图解析其样式时,您在主题上设置的属性将由每个视图继承。在您的情况下,每个没有在其他地方设置明确背景的视图将呈现@颜色/奶油色背景。这必然会导致您遇到的各种视觉问题,以及造成大量不必要的透支。

将常见样式应用于片段的更好方法是简单地创建样式

<style name="Fragment">
    <item name="android:background">@color/cream</item>
</style>

并从每个片段的根视图引用它,例如

<LinearLayout style="@style/Fragment">
    ...
</LinearLayout>

这意味着需要额外输入,因为对样式的引用需要进入每个片段,但是没有好办法避免这种情况 - 从概念上讲,只有View类可以有自己的主题设置默认样式(例如您可以将textViewStyle属性指向样式定义,它将应用于所有TextView。但是,碎片(或活动)不是视图,因此该机制不适用。

相关问题