【发布时间】:2012-08-31 22:37:52
【问题描述】:
我需要一个附加到操作项的自定义下拉菜单。我设法为主页图标做同样的事情,但它似乎与其他操作项完全不同。
我知道这个问题和答案: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),但它看起来更好,我不知道从哪里获得所有这些样式(如果只是那样的话)让它看起来像那样。我的意思是:
好 -> 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;
}
【问题讨论】:
-
考虑到您认为的“下拉”是
Spinner,Spinner看起来就像Spinner。您可以通过在层次结构视图中使用NAVIGATION_MODE_LIST查看活动来判断这一点。也许您可能会考虑编辑您的问题以提供给您不喜欢的结果的源代码。 -
感谢您的评论。我用代码更新了我的问题,并解释了我不喜欢 Spinner 的地方。
标签: android android-actionbar actionbarsherlock