我需要一个附加到操作项的自定义下拉菜单。我设法为主页图标做同样的事情,但它似乎与其他操作项目完全不同。
我知道这个问题和答案:How to add a Dropdown item on the action bar
我的问题是我想完全自定义它(我使用自定义字体,还需要图标),所以我想子菜单是不够的。并将自定义附加Spinner
为actionLayout
看起来不像下拉菜单。
对于主页图标,它看起来像这样:
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
( Spinner
ListNavigationCallbacks 使用 a SpinnerAdapter
),但它看起来更好,我不知道从哪里获得所有这些样式(如果只是那样的话)让它看起来像那样。我是说:
好->NAVIGATION_MODE_LIST
外观如何:它包含列表,它附加在主页图标下。
不好-> 自定义外观如何Spinner
:actionLayout
它将屏幕宽度与一些额外的深色背景相匹配,替换操作项图标(这很容易更改),最重要的是,使屏幕的其余部分变暗。它看起来很像带有自定义列表的 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;
}