0

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

主背景是否指定为@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>

编辑:因为如果我不指定background并且android:background在我的主要风格(Theme.StandBy)中问题消失了,我可能会问错误的问题。我放入这些项目的目的是为我的所有片段(选项卡的内容)指定默认背景。这行得通,但有我上面提到的不需要的副作用。我应该以另一种方式这样做吗?感谢您的任何建议!

4

1 回答 1

0

当视图解析其样式时,您在主题上设置的属性将被每个视图继承。在您的情况下,每个没有在其他地方设置显式背景的视图都将呈现 @color/cream 背景。这势必会导致您遇到的各种视觉问题,以及产生大量不必要的透支。

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

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

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

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

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

于 2013-11-11T01:43:06.380 回答