我需要一个附加到操作项的自定义下拉菜单。我设法为主页图标执行相同的操作,但似乎与其他操作项完全不同。
我知道这个问题和答案: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使用SpinnerAdapter
)但它看起来更好,我不知道从哪里获取所有这些样式(如果它只是那样)它看起来像那样。我的意思是:
好 - &gt; NAVIGATION_MODE_LIST
看起来如何:它正在包装列表,它附在主页图标下面。
错误 - &gt;自定义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;
}
答案 0 :(得分:3)
尝试更换:
Spinner spinner = new Spinner(this);
使用:
Spinner spinner = new Spinner(getActionBar().getThemedContext());
这将使用Context
主题来匹配操作栏,并且应该有所帮助。