我正在使用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)中指定background
和android:background
,问题就消失了,我想到我可能会问错误的问题。放置这些项目的目的是为我的所有片段(标签内容)指定默认背景。这有效,但有我上面提到的不必要的副作用。我应该以另一种方式这样做吗?谢谢你的任何建议!
答案 0 :(得分:0)
当视图解析其样式时,您在主题上设置的属性将由每个视图继承。在您的情况下,每个没有在其他地方设置明确背景的视图将呈现@颜色/奶油色背景。这必然会导致您遇到的各种视觉问题,以及造成大量不必要的透支。
将常见样式应用于片段的更好方法是简单地创建样式
<style name="Fragment">
<item name="android:background">@color/cream</item>
</style>
并从每个片段的根视图引用它,例如
<LinearLayout style="@style/Fragment">
...
</LinearLayout>
这意味着需要额外输入,因为对样式的引用需要进入每个片段,但是没有好办法避免这种情况 - 从概念上讲,只有View类可以有自己的主题设置默认样式(例如您可以将textViewStyle
属性指向样式定义,它将应用于所有TextView。但是,碎片(或活动)不是视图,因此该机制不适用。