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音乐

Solutions Collecting From Web of "Android ActionBar – 将自定义视图推到屏幕底部"

所以我设法find这个肮脏的解决scheme..嗯,在我的业余意见肮脏。

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

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

而在这个option_menu项目的XML,我已经实现了一个actionViewClass,在这种情况下,我用相对布局(我猜我可以只使用视图..?):

 <item android:id="@+id/layout_item" android:actionViewClass="android.widget.RelativeLayout" android:showAsAction="always|withText" android:title="Text 1"/> </menu> 

所以然后我膨胀了一个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)); } 

请随意编辑/增强这个答案,因为你认为合适。

我已经做了一个基于你的解决scheme,包括自定义布局顶部+自定义布局底部+标题/副标题+主页图标。 这里是代码:

 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

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="right" > <TextView android:id="@+id/element1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#fff" android:background="#ff0000" android:text="Element 1"/> <TextView android:id="@+id/element2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#000" android:background="#f0f0f0" android:layout_toRightOf="@+id/element1" android:text="Element 2"/> </RelativeLayout> 

menu_including_layout.xml

 <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/action1" android:title="Action 1" android:icon="@android:drawable/ic_dialog_alert" android:showAsAction="ifRoom" /> <item android:id="@+id/action2" android:title="Action 2" android:icon="@android:drawable/ic_dialog_info" android:showAsAction="ifRoom" /> <item android:id="@+id/layout_item" android:actionViewClass="android.widget.RelativeLayout" android:showAsAction="always|withText" android:title="Layout Item"/> </menu> 

ab_bottom_layout.xml

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/bottom_layout_txt_status" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Click this button"/> <ImageButton android:id="@+id/bottom_layout_btn_chat" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@android:drawable/ic_menu_camera" android:layout_toRightOf="@+id/bottom_layout_txt_status" android:contentDescription="@string/app_name"/> </RelativeLayout> 

代码对我来说是完美的。 当我的平板电脑在肖像上时,我可以看到拆分的ActionBar。 在景观上它足够宽,可以将所有物品存放在顶部。

希望能帮助到你