Android ActionBar – 将自定义视图推送到屏幕底部

我有一个拆分ActionBar,我正在尝试添加几乎与谷歌播放’现在播放’相同的function..

我可以使用onCreateOptionsMenu让菜单项显示在屏幕底部,但是当使用actionBar.setCustomView时,我似乎无法在屏幕底部显示自定义视图。 自定义视图位于顶部ActionBar下方。

有谁知道如何将自定义视图强制到底部,或者将自定义视图添加到onCreateOptionsMenu?

以下是我的代码片段:

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ActionBar actionBar = getActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); actionBar.setDisplayShowTitleEnabled(true); actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); //Custom view to add actionBar.setCustomView(R.layout.albumitem); //This view shows up just under the top actionbar at the moment, despite menu items being at the bottom 

菜单选项代码:(这些显示在我想要自定义视图的底部)

 @Override public boolean onCreateOptionsMenu(Menu menu) { new MenuInflater(this).inflate(R.menu.option_menu, menu); return (super.onCreateOptionsMenu(menu)); } 

我相信谷歌播放音乐应用程序底部现在播放的菜单是分割操作栏内的自定义视图:

Google Play音乐

所以我设法find了一个肮脏的解决方案..好吧,我的业余观点很脏..

在oncreateOptionsMenu中,我已经夸大了一个名为option_menu的菜单,如下所示:

 @Override public boolean onCreateOptionsMenu(Menu menu) { new MenuInflater(this).inflate(R.menu.option_menu, menu); 

在该option_menu项目的xml中,我实现了一个actionViewClass,在这种情况下我使用了相对布局(我猜我可能只是使用View ..?):

   

然后我膨胀了一个xml布局,并将其添加到我的菜单中定义的layout_item:

  @Override public boolean onCreateOptionsMenu(Menu menu) { new MenuInflater(this).inflate(R.menu.option_menu, menu); relativeLayout = (RelativeLayout) menu.findItem(R.id.layout_item) .getActionView(); View inflatedView = getLayoutInflater().inflate(R.layout.now_playing, null); relativeLayout.addView(inflatedView); return (super.onCreateOptionsMenu(menu)); } 

如您所愿,请随时编辑/增强此答案。

我已经完成了基于你的解决方案,包括顶部的自定义布局+底部的自定义布局+标题/副标题+主页图标。 这是代码:

 public class SplitABActivity extends Activity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ActionBar ab = getActionBar(); ab.setTitle("Action Bar Title"); ab.setSubtitle("Action Bar Subtitle"); ab.setDisplayShowHomeEnabled(true); LayoutInflater inflater = (LayoutInflater) getSystemService(Activity.LAYOUT_INFLATER_SERVICE); RelativeLayout layout = (RelativeLayout) inflater.inflate(R.layout.ab_custom_layout, null); ab.setCustomView(layout); ab.setSplitBackgroundDrawable(new ColorDrawable(Color.BLUE)); ab.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_TITLE); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu_including_layout, menu); RelativeLayout layout = (RelativeLayout) menu.findItem(R.id.layout_item).getActionView(); View v = getLayoutInflater().inflate(R.layout.ab_bottom_layout, null); layout.addView(v); return super.onCreateOptionsMenu(menu); } } 

ab_custom_layout.xml

     

menu_including_layout.xml

      

ab_bottom_layout.xml

     

代码对我来说非常合适。 当我的平板电脑处于人像状态时,我可以看到拆分的ActionBar。 在景观上它足够宽,可以存储在顶部的所有项目。

希望能帮助到你