ActionBarSherlock:选项卡在横向模式下丢失自定义视图

Posted

技术标签:

【中文标题】ActionBarSherlock:选项卡在横向模式下丢失自定义视图【英文标题】:ActionBarSherlock: Tab loses custom view in landscape mode 【发布时间】:2012-11-17 12:25:45 【问题描述】:

我正在使用带有NAVIGATION_MODE_TABS 的 ActionBarSherlock。每个选项卡都包含一个自定义视图。虽然在纵向模式下看起来不错,但在横向模式下,如果选项卡显示为下拉列表(由 android 自动完成),则会出现许多问题:

Android 4.x:所选选项卡未显示在操作栏中(见图,红色圆圈)。直接使用 Android SDK 中的内置操作栏时也会发生同样的情况。 Android 2.x:所选选项卡未显示在操作栏中。一旦我点击下拉菜单,整个下拉菜单就会消失,而我得到的是空标签。

如果我不使用自定义视图,一切正常。我在图像上创建 ActionBar 的代码(故意保持简单):

getActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
for (int i = 0; i < 7; i++) 
    ActionBar.Tab tab = getActionBar().newTab();
    TextView view = new TextView(this);
    view.setText("This is tab " + (i + 1));
    tab.setCustomView(view);
    tab.setTabListener(this);
    getActionBar().addTab(tab);

我做错了吗?

编辑:澄清一下,getSupportActionBar() 存在于原始代码中,ActionBarSherlock 的操作栏除了所描述的问题外工作正常。我使用上面的代码示例来说明使用内置操作栏时也存在第一个问题(操作栏中未显示所选选项卡)。很抱歉造成混乱。

【问题讨论】:

【参考方案1】:

对于 ActionBarSherlock,您应该使用 getSupportActionBar() 以便它在 2.x 上工作

getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
for (int i = 1; i <= 3; i++) 
    ActionBar.Tab tab = getSupportActionBar().newTab();
    tab.setText("Tab " + i);
    tab.setTabListener(this);
    getSupportActionBar().addTab(tab);

文本颜色来自您应用到选项卡的自定义视图或来自您在活动级别应用的主题。

【讨论】:

感谢您的回答。关于getSupportActionBar(),请看我的编辑。关于文本颜色(黑底黑字):自定义样式似乎不是问题。这是没有任何自定义的股票 Holo 主题。如果我切换到 Holo.Light,ActionBar 仍然不会显示选定的选项卡。【参考方案2】:

这个方法对我很有效:

只需放置导航方法,添加添加标签后:

... // adding tabs
bar.setNavigationMode(ActionBar.Navigation_mode_tabs);

祝你好运;)

【讨论】:

以上是关于ActionBarSherlock:选项卡在横向模式下丢失自定义视图的主要内容,如果未能解决你的问题,请参考以下文章

为啥actionbar sherlock的横向高度会发生变化?

IOS 设备方向卡在纵向模式,没有横向

在横向模式下制作 iOS 应用

ActionBar Sherlock ,操作栏选项卡和片段

ActionBarSherlock:java.lang.NoClassDefFoundError:com.actionbarsherlock.R$styleable

Android:使用选项卡在不同片段之间切换