android:dividerPadding没有效果

4

这个主题很好用,为ActionBar的三个选项卡引用了三种自定义样式。

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

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

我知道这可能听起来很奇怪,但你实际上将这种风格应用于“Activity”吗?另外,在“ABTB”中放置例如<item name="android:divider">@null</item>是否会隐藏所有分隔线? - andr
公平的问题,但是是的 - 我没有粘贴样式的其他元素(证明它在应用程序中显示)只是为了简化SO问题。 - Adam
关于 "android:divider = @null" -- 是的,这将隐藏分隔线。 - Adam
是的,我也这么想,只是试图消除明显的情况。我刚在API 17中尝试了一下,效果非常好 - 填充1dip:http://www.anony.ws/iVK 和20dip:http://www.anony.ws/iVN(我使用放大镜图标作为分隔符,以简化操作)。你在哪个API上尝试你的主题?是模拟器还是真实设备? - andr
设备和模拟器都可以用于测试应用程序。 - Adam
如果不设置明确的分隔符会发生什么?默认的分隔符是否被硬编码为忽略填充?(由于操作栏的官方文档已经存在巨大的错误,我不信任它们) - Adam
1个回答

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-*目录中提供了这些样式的覆盖(例如,X <= 17values-vX),则将忽略来自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可绘制对象非常适合此目的,因为您可以为每个图层明确设置填充。


我是否误解了文档?我期望dividerPadding为20dip,将选项卡推开,使其相互之间间隔40dip像素。 - Adam
谢谢。我仔细检查了文档,但这个“微妙之处”没有提到。烦死了,讨厌安卓糟糕的文档! - Adam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接