这个主题工作得很好,为ActionBar的三个选项卡引用了三个自定义样式。
但是“dividerpadding”对它们中的任何一个都没有影响——在API17设备上运行。

 <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>

最佳答案

首先,dividerPadding属性(据我所知)仅适用于*ActionBar.TabBar样式。
我已经使用一个非常基本的应用程序测试了您的风格,它使用了本机ActionBar和一个提供api 17的设备。我已将dividerPadding属性设置为不同的值,并将其余属性保留为默认值。结果如下:
dividerPadding="0dip"
dividerPadding="15dip"
dividerPadding="20dip"
如您所见,上一张图片上的分隔符消失了。所以我的第一个建议就是看看你是否看到了。除此之外,dividerPadding似乎按预期工作。
我的第二个建议来自android平台处理放置在不同values-*目录中的样式资源的方式。我的直觉是,您可能正在使用默认values目录中的操作栏样式。如果您碰巧在兼容的values-*目录中提供了这些样式的覆盖(例如values-vX其中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设置为可拉伸,这将强制增加填充。我相信layerdrawable将非常适合这个目的,因为您可以显式地为每个层设置填充。

08-25 14:37