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

Tim*_*eed 16 android android-actionbar

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

我可以使用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
Run Code Online (Sandbox Code Playgroud)

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

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

    return (super.onCreateOptionsMenu(menu));
}
Run Code Online (Sandbox Code Playgroud)

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

Google Play音乐

Tim*_*eed 17

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

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

@Override
public boolean onCreateOptionsMenu(Menu menu) {
        new MenuInflater(this).inflate(R.menu.option_menu, menu);
Run Code Online (Sandbox Code Playgroud)

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

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

</menu>
Run Code Online (Sandbox Code Playgroud)

然后我膨胀了一个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));
    }
Run Code Online (Sandbox Code Playgroud)

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

  • 不,我最近意识到在底部使用片段可能更好. (2认同)