5

我正在使用该ActionBarSherlock库开发一个 Android 应用程序。在一项活动中,我将选项卡式导航与折叠ActionBar(底部的操作项)结合使用。

在这张图片中,您可以看到Activity当前状态:标签被推入第二行。

当前操作栏


在下图中,您可以看到Activity我想要的方式:选项卡应该在第一行,而不是在第二行。我已经阅读了ActionBarActionBarSherlock文档,但找不到强制这种行为的方法。

想要的 ActionBar 布局

这是当前代码,用于创建ActionBar.

public class AdminActivity extends SherlockFragmentActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_admin);

    ActionBar actionBar = getSupportActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    ActionBar.Tab itemsTab = actionBar.newTab().setText(R.string.label_tab_items);
    ActionBar.Tab usersTab = actionBar.newTab().setText(R.string.label_tab_users);

    actionBar.addTab(itemsTab);
    actionBar.addTab(usersTab);
}

有任何想法吗?

4

1 回答 1

5

有一个反射'hack'来做到这一点。我不相信解决方案,我在这个 StackOverflow 问题中发现了用 custom view 复制 ActionBar Tab(s)

//pre-ICS
if (actionBarSherlock instanceof ActionBarImpl) {
    enableEmbeddedTabs(actionBarSherlock);

//ICS and forward
} else if (actionBarSherlock instanceof ActionBarWrapper) {
    try {
        Field actionBarField = actionBarSherlock.getClass().getDeclaredField("mActionBar");
        actionBarField.setAccessible(true);
        enableEmbeddedTabs(actionBarField.get(actionBarSherlock));
    } catch (Exception e) {
        Log.e(TAG, "Error enabling embedded tabs", e);
    }
} 

//helper method
private void enableEmbeddedTabs(Object actionBar) {
    try {
        Method setHasEmbeddedTabsMethod = actionBar.getClass().getDeclaredMethod("setHasEmbeddedTabs", boolean.class);
        setHasEmbeddedTabsMethod.setAccessible(true);
        setHasEmbeddedTabsMethod.invoke(actionBar, true);
    } catch (Exception e) {
        Log.e(TAG, "Error marking actionbar embedded", e);
    }
}

另请参阅此博客文章:http ://sparetimedev.blogspot.co.uk/2012/11/forcing-embedded-tabs-in-actionbar.html

于 2012-11-04T13:36:05.787 回答