堆叠的 ActionBar 选项卡栏未填充父级

Posted

技术标签:

【中文标题】堆叠的 ActionBar 选项卡栏未填充父级【英文标题】:Stacked ActionBar tab bar not filling parent 【发布时间】:2013-02-05 10:09:36 【问题描述】:

我正在创建操作栏导航选项卡,但是当操作栏堆叠时,选项卡没有获得整个宽度空间。我有一张照片来说明它。

在这种情况下,是否可以为每个选项卡分配 50% 的屏幕宽度?

谢谢

我编辑说它不是 Sherlock 操作栏。我正在使用三星 Galaxy Note 10.1 和 Nexus 7。现在,在 Nexus 中对其进行测试,我注意到它的行为有所不同。另一个截图:

【问题讨论】:

Kaixo Jon,我遇到了同样的问题。你得出结论了吗? Ez,对不起,mdelolmo,但我处于同样的情况。太荒谬了。 你有解决办法吗? 为什么不使用 Canvas 呢?您可以绘制选项卡项目,然后用片段填充下面的空间 @PierGiorgioMisley 这可能不是一个好主意。 【参考方案1】:

我认为目前这不可行。过去几天我一直在尝试做同样的事情,这就是我目前所发现的。

android 框架使用一个名为 ActionBarPolicy 的类来设置有关 ActionBar 行为的一些规则。 在此文件中(可在此处找到:https://github.com/android/platform_frameworks_base/blob/master/core/java/com/android/internal/view/ActionBarPolicy.java),您将找到一个名为 getStackedTabMaxWidth() 的方法,该方法返回一个维度值(当前在资源中设置为 160dip)。

这个值使用的是放置在ScrollingTabContainerView(https://github.com/android/platform_frameworks_base/blob/master/core/java/com/android/internal/widget/ScrollingTabContainerView.java)中的内部类TabView。 TabView 是 ActionBar 的 TabBar 的私有实现。

现在我认为这个值和这个行为都不能被修改,除非可能使用反射。我对此知之甚少,因此如果有人能做到这一点,请不要犹豫,直言不讳,因为这确实是一种不好的行为,在某些平板电脑上看起来并不好。

【讨论】:

来自android.googlesource.com/platform/frameworks/base/+/… "堆叠的操作栏标签现在有宽度限制。这可以防止可以跨越整个屏幕的超宽标签。如果标签簇没有跨越整个宽度,则它会居中. " 在 Android M 中,Android 似乎正在从将标签附加到操作栏上。不幸的是,旧版本中仍然存在此问题。【参考方案2】:

Android 堆叠的操作栏标签没有可调整的宽度。

“堆叠的操作栏标签现在有宽度限制。这可以防止超宽标签可以跨越整个屏幕。如果标签簇没有跨越整个宽度,则它会居中。” https://android.googlesource.com/platform/frameworks/base/+/b8139af3dcae80c0030afd0354dc424a7c72c3d9

解决方案是使用 Android 5.0 发布的 Android 设计支持库中的 TabLayout API。 Android 支持库需要 appcompat 库,但如果您使用 gradle 构建,该依赖关系会为您解决。

对于大多数开发人员来说,这不是问题,但 TabLayout 设置至少需要 SDK API 级别 22,因为 appcompat 依赖项是针对 22 编译的。但是,TabLayout 没有运行时依赖于 22,这意味着你可以在 API 级别 7 的设备上运行它。

tl;r - 使用 Android 设计库中的 Tablayout。开发人员需要 API 级别 22,但可以在最高 v7 的旧手机上运行。

【讨论】:

以上是关于堆叠的 ActionBar 选项卡栏未填充父级的主要内容,如果未能解决你的问题,请参考以下文章

仅使用一个视图控制器的具有多个选项卡的选项卡栏

Matlab进阶绘图第13期—带填充纹理的堆叠图

UIsearchBar 取消按钮导致导航栏未隐藏

在 Android Studio 中找不到“填充父级”[重复]

另一个选项卡栏项目中的一个选项卡栏项目中的 PopToRootViewController

如何减小 UI 选项卡栏项图像的大小以使其适合选项卡栏?