如何停止动作条标签导航时,它得到太长显示为微调?(How to stop ActionBar Tab

2019-07-04 23:23发布

我有一个标签导航的操作栏。 3.1上运行的一切虽然很好,但一旦我一个4.1设备上安装应用程序,其中强制标签显示为一个微调,击毁我的布局设计。 貌似标签正在采取太多的空间(如果我删除一些everyting看起来确定再次片段。有没有办法制止这种行为,就像在安卓3.1再次显示导航的标签?有谁知道?

谢谢!

Answer 1:

我找到了答案在这里 。 必须设置导航模式后加入标签。



Answer 2:

首先,我只想澄清:这不是一个错误,它按预期工作。 参考这对谷歌代码论坛讨论。

然而,我来,如果你忽略了解决方案:

<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的宽度在屏幕上。

此行为发生(我假设),因为嵌入式标签仅限于动作条的宽度,因此,如果您覆盖布尔值,它会在一个单独的行标签,它不会崩溃。 但不幸的是我无法解释自己为什么这并不景观工作。



Answer 3:

很抱歉,但你不能阻止这一切。 这是一个功能,而不是一个错误,根据谷歌。 请参阅: http://code.google.com/p/android/issues/detail?id=24439



Answer 4:

据我了解,你应该考虑使用ViewPager + PagerTitleStrip如果你有很多标签,并希望让它们滚动所有的时间。 下面是从载荷大小的报价://code.google.com/p/android/issues/detail ID = 24439个#C9:

如果您的用户界面包含许多选项卡,在这里你打滚动标签或塌陷到微调的情况下定期的点,你可以考虑使用一个PagerTitleStrip作为指标,而不是完整的标签在一个更简洁的方式呈现这些信息。 这可以是如果所述一组显示的选项卡的是用户控制下特别有用。 可点击标签的工作最好的时候有一个小的,有界集,如YouTube应用。 滚动凸片条失去对一个简单的标题条一触式访问到的任何标签,其主要优点。 在PagerTitleStrip风格的例子可以在Android Market和Google+应用程序被发现。

我不建议使用的招数因为没有人保证的小把戏工作稳定。



Answer 5:

如果你真的想仍然使用标签和崩溃的微调阻止它,它使用反射,如果你碰巧被设置为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) {
    }
}

如果没有足够的空间,该标签将在动作条滚动。 标签和任何菜单actionItems给出1/2屏幕宽度,这样就可以计算出,如果标签将结束滚动或不做出调整选项卡,菜单actionItem标签等,或者强制标签了多层模式,以避免滚动标签...或是像先前建议,使用PagerTitleStrip代替。



文章来源: How to stop ActionBar Tab navigation to display as a spinner when it gets too long?