从操作项自定义下拉列表(actionbarsherlock)

时间:2012-08-31 22:37:53

标签: android android-actionbar actionbarsherlock

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

我知道这个问题和答案: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;
}

1 个答案:

答案 0 :(得分:3)

尝试更换:

Spinner spinner = new Spinner(this);

使用:

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

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