Android 当ActionBar选项卡导航变得太长时,如何停止将其显示为微调器?

Android 当ActionBar选项卡导航变得太长时,如何停止将其显示为微调器?,android,android-layout,android-actionbar,actionbarsherlock,Android,Android Layout,Android Actionbar,Actionbarsherlock,我有一个带有选项卡导航的操作栏。在3.1上运行时,一切都很好,但一旦我在4.1设备上安装了应用程序,选项卡就被迫显示为微调器,破坏了我的布局设计。 看起来选项卡占用了太多的空间(如果我每次都删除一些片段,看起来又正常了)。 有没有一种方法可以像android 3.1那样停止这种行为并再次将导航显示为选项卡?有人知道吗 谢谢!很抱歉,但你无法阻止。根据谷歌的说法,这是一个功能,而不是一个bug。请参阅:首先澄清一下:这不是一个bug,它可以正常工作。请参考谷歌代码论坛上的讨论 但是,我得出的解决方

我有一个带有选项卡导航的操作栏。在3.1上运行时,一切都很好,但一旦我在4.1设备上安装了应用程序,选项卡就被迫显示为微调器,破坏了我的布局设计。 看起来选项卡占用了太多的空间(如果我每次都删除一些片段,看起来又正常了)。 有没有一种方法可以像android 3.1那样停止这种行为并再次将导航显示为选项卡?有人知道吗


谢谢!

很抱歉,但你无法阻止。根据谷歌的说法,这是一个功能,而不是一个bug。请参阅:

首先澄清一下:这不是一个bug,它可以正常工作。请参考谷歌代码论坛上的讨论

但是,我得出的解决方案是,如果您覆盖:

<bool name="abs__action_bar_embed_tabs">false</bool> //for ActionBarSherlock
<bool name="android:action_bar_embed_tabs">false</bool> //for default ActionBar
ActionBarSherlock的
false//
false//默认ActionBar
在纵向模式下,您将不会有
导航模式\u列表
。但是,您不会有嵌入式选项卡,如果您将屏幕旋转到横向模式,也不会工作。 默认情况下,您将有嵌入式选项卡,因此在宽度>480dp的屏幕上有一个
导航模式列表


发生这种行为(我假设)因为嵌入的选项卡仅限于ActionBar的宽度,所以如果覆盖布尔值,它将在单独的一行中包含选项卡,并且不会折叠。但不幸的是,我无法解释为什么这在横向中不起作用。

我找到了答案。必须在添加选项卡后设置导航模式。

据我所知如果你有很多选项卡,想让它们随时滚动,就应该考虑使用<强> VIEWPGA+PGETETILLAP<<强>。 这里有一段引用自ttps://code.google.com/p/android/issues/detail?id=24439#c9:

如果您的UI包含许多选项卡,以至于您点击了滚动键 标签或崩溃到旋转的情况下定期,您可能会考虑使用 PagerTitleStrip作为一个指示器,而不是完整的选项卡来显示此信息 以一种不太混乱的方式提供信息。如果 显示的选项卡的数量由用户控制。当 有一个小的、有边界的集合,比如在YouTube应用程序中 标签条失去了对任何标签的一触式访问,这是它们的主要优势 在一个简单的标题栏上。PagerTitleStrip样式的示例可以 可以在Android市场和Google+应用程序中找到


我不建议使用技巧,因为没有人保证技巧会稳定工作。

如果您真的想继续使用选项卡并阻止其塌陷为微调器,那么在技术上,如果您恰好为选项卡设置了自定义视图,则可以使用反射:

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) {
    }
}
View v=;
Tab Tab=actionBar.newTab().setCustomView(v);
做{
v=(视图)v.getParent();
}而(v!=null&&!v.getClass().getSimpleName().equalsIgnoreCase(“ScrollingTabContainerView”);
如果(v!=null){
试一试{
方法allowCollapse=v.getClass().getDeclaredMethod(“setAllowCollapse”,新类[]{Boolean.TYPE});
allowCollapse.setAccessible(true);
invoke(v,新对象[]{false});
}捕获(例外e){
}
}

如果没有足够的空间,选项卡将在操作栏中滚动。选项卡和任何菜单操作项的屏幕宽度为1/2,因此您可以计算选项卡是否会滚动,并对选项卡、菜单操作项标签等进行调整,或强制选项卡进入堆叠模式,以避免滚动选项卡…或如前所述斯特德,改为使用PagerTitleStrip。

有一个技巧可以摆脱它(至少在纵向模式下)。请参阅上面我的答案。