android:dividerPadding无效

时间:2013-02-07 18:00:41

标签: android

这个主题很好用,为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>

1 个答案:

答案 0 :(得分:3)

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

我使用一个非常基本的应用程序测试了你的风格,使用了原生ActionBar和一个提供API 17的设备。我已将dividerPadding属性设置为不同的值,剩下的就是具有默认值的属性。结果如下:

  • dividerPadding="0dip"

enter image description here

  • dividerPadding="15dip"

enter image description here

  • dividerPadding="20dip"

enter image description here

正如您所看到的,分隔符在最后一张图像上消失了。所以我的第一个建议是检查你是否看到它。除此之外,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设置为drawable,这将强制额外填充。我相信layer drawable对于这个目的很有用,因为你可以为每一层明确设置填充。