我有一个带有选项卡导航的操作栏。在 3.1 上运行时一切都很好,但是一旦我在 4.1 设备上安装了应用程序,选项卡就被迫显示为微调器,破坏了我的布局设计。看起来标签占用了太多空间(如果我删除了一些片段,一切看起来都很好。有没有办法阻止这种行为并再次将导航显示为标签,就像在 android 3.1 中一样?有人知道吗?
谢谢!
我有一个带有选项卡导航的操作栏。在 3.1 上运行时一切都很好,但是一旦我在 4.1 设备上安装了应用程序,选项卡就被迫显示为微调器,破坏了我的布局设计。看起来标签占用了太多空间(如果我删除了一些片段,一切看起来都很好。有没有办法阻止这种行为并再次将导航显示为标签,就像在 android 3.1 中一样?有人知道吗?
谢谢!
我在这里找到了答案。添加选项卡后必须设置导航模式。
首先,澄清一下:这不是一个错误,它按预期工作。在 Google 代码论坛上参考此讨论。
但是,我得出的解决方案是,如果您覆盖:
<bool name="abs__action_bar_embed_tabs">false</bool> //for ActionBarSherlock
<bool name="android:action_bar_embed_tabs">false</bool> //for default ActionBar
你不会有NAVIGATION_MODE_LIST
纵向模式。但是,您不会有嵌入的选项卡,如果您将屏幕旋转为横向,它也不会工作。默认情况下,您将嵌入标签页,因此NAVIGATION_MODE_LIST
屏幕宽度大于 480dp。
发生这种行为(我假设)是因为嵌入的选项卡仅限于 ActionBar 的宽度,因此如果您覆盖布尔值,它将在单独的行中有选项卡并且不会折叠。但不幸的是,我无法解释为什么这在横向上不起作用。
据我了解,如果您有许多选项卡并希望它们始终可滚动,您应该考虑使用ViewPager + PagerTitleStrip 。这是来自 ttps://code.google.com/p/android/issues/detail?id=24439#c9 的引用:
如果您的 UI 包含许多选项卡,以至于您经常点击滚动选项卡或折叠到微调框,您可能会考虑使用 PagerTitleStrip 作为指示器而不是完整选项卡,以便以不那么混乱的方式呈现此信息。如果显示的选项卡集在用户控制之下,这将特别有用。可点击标签在 YouTube 应用程序中存在小的、有界的集合时效果最佳。滚动标签条失去对任何标签的一键式访问,这是它们相对于简单标题条的主要优势。PagerTitleStrip 样式的示例可以在 Android Market 和 Google+ 应用程序中找到。
我不建议使用技巧,因为没有人保证技巧会稳定运行。
对不起,但你无法阻止这一切。据谷歌称,这是一项功能,而不是错误。请参阅:http ://code.google.com/p/android/issues/detail?id=24439
如果您真的想仍然使用选项卡并阻止它折叠成微调器,那么如果您碰巧为选项卡设置了 customView,则在技术上可以使用反射:
View v = <your custom tab view>;
Tab tab = actionBar.newTab().setCustomView(v);
do{
v = (View)v.getParent();
} while (v!=null && !v.getClass().getSimpleName().equalsIgnoreCase("ScrollingTabContainerView"));
if(v!=null) {
try {
Method allowCollapse = v.getClass().getDeclaredMethod("setAllowCollapse", new Class[] { Boolean.TYPE });
allowCollapse.setAccessible(true);
allowCollapse.invoke(v, new Object[]{ false });
} catch (Exception e) {
}
}
如果没有足够的空间,选项卡将在 ActionBar 中滚动。选项卡和任何菜单操作项的屏幕宽度为 1/2,因此您可以计算选项卡是否最终滚动并调整选项卡、菜单操作项标签等或强制选项卡进入堆叠模式以避免滚动选项卡...或者如前所述,使用 PagerTitleStrip 代替。