Android 使用带有自定义操作栏视图的ABS ViewPager

Android 使用带有自定义操作栏视图的ABS ViewPager,android,actionbarsherlock,Android,Actionbarsherlock,我有一个应用程序,它使用ActionBarSherlock为选项卡导航提供一个ViewPager控件,以及一个标准的ActionBar。一切正常,除了使用自定义ActionBar视图时,操作栏将其位置移动到选项卡控件下方 当使用标准ActionBar(即无自定义视图)时,一切正常: 但是,当我将操作栏切换为使用自定义视图时(没有任何其他代码更改),操作栏将切换到选项卡控件下方: 有什么特别的原因吗?我可以做些什么来使用自定义的动作栏视图,但仍然在选项卡上方放置动作栏?本例中使用的所有XML布

我有一个应用程序,它使用ActionBarSherlock为选项卡导航提供一个ViewPager控件,以及一个标准的ActionBar。一切正常,除了使用自定义ActionBar视图时,操作栏将其位置移动到选项卡控件下方

当使用标准ActionBar(即无自定义视图)时,一切正常:

但是,当我将操作栏切换为使用自定义视图时(没有任何其他代码更改),操作栏将切换到选项卡控件下方:

有什么特别的原因吗?我可以做些什么来使用自定义的动作栏视图,但仍然在选项卡上方放置动作栏?本例中使用的所有XML布局都非常简单,如下面的代码所述

我使用的是ActionBarSherlock 4.1.0(在撰写本文时,是最新的稳定版本)。这种行为发生在Android2.2(我支持的最早版本)和Android4.1上

我的ABS初始化代码:

setContentView( R.layout.main ); // XML layout that currently contains only the ViewPager
mViewPager = (ViewPager) findViewById( R.id.viewPager );

// Set up action bar
ActionBar ab = getSupportActionBar();
Drawable gd = getResources().getDrawable( R.drawable.actionbar_bg ); // Background gradient
ab.setBackgroundDrawable( gd );
ab.setCustomView( R.layout.actionbar_custom ); // For this example, contains just a TextView
ab.setDisplayOptions( ActionBar.DISPLAY_SHOW_CUSTOM );

// Set up tabs
ab.setNavigationMode( ActionBar.NAVIGATION_MODE_TABS );
mTabsAdapter = new TabsAdapter( this, mViewPager );
mTabsAdapter.addTab( ab.newTab().setText( "Tab 1" ), Tab1Fragment.class, null );
mTabsAdapter.addTab( ab.newTab().setText( "Tab 2" ), Tab2Fragment.class, null );
mTabsAdapter.addTab( ab.newTab().setText( "Tab 3" ), Tab3Fragment.class, null );

墨菲定律:在你把自己的问题贴到堆栈上之后,你会马上找到答案

ActionBar.DISPLAY\u SHOW\u HOME
添加到
ab.setDisplayOptions()
将导致ActionBar返回屏幕顶部


对于这个特定的项目来说,这是一个可接受的解决方案(因为我可能无论如何都希望有主图标),但我仍然很好奇,对于那些出于某种原因不愿显示主页图标的人来说,是否还有其他方法可以实现这一点。

没有。这是一个应该在Android 4.1中修复的错误。对不起,我不明白这对你来说是怎么回事。如果添加actionBar.setDisplayOptions(actionBar.DISPLAY\u SHOW\u HOME);在ActionBar.DISPLAY\u SHOW\u CUSTOM之后,它不再为我显示自定义ActionBar