4

这个主题工作正常,为 ActionBar 选项卡的 3 个部分引用了三种自定义样式。

但是“dividerPadding”对它们中的任何一个都没有影响——在 API 17 设备上运行。

 <style name="Theme.AppEmptyTitleBar" parent="android:style/Theme.Holo">
        <item name="android:actionBarStyle">@style/AB</item>
        <item name="android:actionBarTabStyle">@style/ABT</item>
        <item name="android:actionBarTabBarStyle">@style/ABTB</item>
    </style>

<style name="AB" parent="android:style/Widget.Holo.ActionBar">
    <item name="android:dividerPadding">20dip</item>
</style>
<style name="ABT" parent="android:style/Widget.Holo.Light.ActionBar.TabView">
    <item name="android:dividerPadding">20dip</item>
</style>
<style name="ABTB" parent="android:style/Widget.Holo.ActionBar.TabBar">
    <item name="android:dividerPadding">20dip</item>
</style>
4

1 回答 1

3

首先,该dividerPadding属性(据我所知)仅适用于*ActionBar.TabBar样式。

我已经使用一个非常基本的应用程序测试了您的样式,该应用程序使用了本机ActionBar和提供 API 17 的设备。我已将dividerPadding属性设置为不同的值,并将其余属性保留为默认值。结果如下:

  • dividerPadding="0dip"

在此处输入图像描述

  • dividerPadding="15dip"

在此处输入图像描述

  • dividerPadding="20dip"

在此处输入图像描述

如您所见,最后一张图片上的分隔符消失了。所以我的第一个建议是检查你是否看到它。除此之外,dividerPadding似乎按预期工作。

我的第二个建议来自 Android 平台处理放置在不同values-*目录中的样式资源的方式。我的预感是您可能正在使用默认values目录中的操作栏样式。如果您碰巧在values-*兼容的目录(例如values-vXwhere X <= 17)中提供了对这些样式的覆盖,则来自的样式values将被忽略。例如,假设您已将这些示例样式放置在values/styles.xml文件中:

<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="AppTheme" parent="@android:style/Theme.Holo">
        <item name="android:actionBarTabBarStyle">@style/ABTB</item>
    </style>

    <style name="ABTB" parent="@android:style/Widget.Holo.ActionBar.TabBar">
        <item name="android:dividerPadding">0dip</item>
    </style>
</resources>

如果然后将此样式定义放在values-v17/styles.xml

<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="AppTheme" parent="@android:style/Theme.Holo">
    </style>
</resources>

它将覆盖AppTheme样式,有效地“重置”(技术上:忽略)整个actionBarTabBarStyle样式(包括dividerPadding属性值)。实际上,您不会看到对ABTB样式所做的任何更改。

编辑

是的,我假设你知道,抱歉 :( 该dividerPadding值仅适用于:

  • TabWidget当(它是标签标签的容器)水平绘制标签时,分隔线的顶部和底部。
  • TabWidget垂直绘制选项卡时分隔线的左侧和右侧。

这正是您在屏幕截图中看到的。据我所知,您必须设置divider为可强制使用额外填充的可绘制对象。我相信layer可绘制对象将非常适合此目的,因为您可以为每一层显式设置填充。

于 2013-02-11T15:21:17.910 回答