2

我需要一个附加到操作项的自定义下拉菜单。我设法为主页图标做同样的事情,但它似乎与其他操作项目完全不同。

我知道这个问题和答案:How to add a Dropdown item on the action bar 我的问题是我想完全自定义它(我使用自定义字体,还需要图标),所以我想子菜单是不够的。并将自定义附加SpinneractionLayout看起来不像下拉菜单。

对于主页图标,它看起来像这样:

    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
    ArrayList<NavItem> data = new ArrayList<NavItem>();
    data.add(...);
    data.add(...);
    ActionBarNavAdapter adapter = new ActionBarNavAdapter(...);
    actionBar.setListNavigationCallbacks(adapter, new OnNavigationListener() {...});

我可以在不牺牲“下拉”的情况下添加我自己的设计。 如何处理其他操作项?

编辑: 我知道使用的活动使用NAVIGATION_MODE_LIST( SpinnerListNavigationCallbacks 使用 a SpinnerAdapter),但它看起来更好,我不知道从哪里获得所有这些样式(如果只是那样的话)让它看起来像那样。我是说:

->NAVIGATION_MODE_LIST外观如何:它包含列表,它附加在主页图标下。 不好-> 自定义外观如何SpinneractionLayout它将屏幕宽度与一些额外的深色背景相匹配,替换操作项图标(这很容易更改),最重要的是,使屏幕的其余部分变暗。它看起来很像带有自定义列表的 AlertDialog,而不是下拉菜单。

代码:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    MenuItem sortItem = menu.findItem(R.id.sort);
    Spinner spinner = new Spinner(this);

    //this is the same adapter because I didn't want to spend time creating a new one
    //ActionBarNavAdapter extends SpinnerAdapter of course
    ArrayList<NavItem> data = new ArrayList<NavItem>();
    data.add(...);
    data.add(...);
    ActionBarNavAdapter adapter = new ActionBarNavAdapter(...);
    spinner.setAdapter(adapter);
    sortItem.setActionView(spinner);
    return true;
}
4

1 回答 1

3

尝试更换:

Spinner spinner = new Spinner(this);

和:

Spinner spinner = new Spinner(getActionBar().getThemedContext());

这将使用Context主题来匹配操作栏,并且应该有所帮助。

于 2012-08-31T23:13:29.277 回答