2012-04-26 5 views
12

Я добавляю пункты меню фрагмента, используя onCreateOptionsMenu успешно ...Элементы меню фрагментов ActionBar. Положив их перед

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) 
{ 
    super.onCreateOptionsMenu(menu, inflater); 
    inflater.inflate(R.menu.additional_fragment_menu, menu); 
} 

выше Это дополнительное меню включает в себя 1 пункт меню. Мне нужно сделать этот пункт меню перед всеми другими существующими элементами, чтобы он появился на панели действий. В настоящее время он выглядит последним.

(Это андроид: showAsAction = «всегда» пункт я добавляю)

Я пытался добавить его программно, но нет никакого выбора в объекте MenuItem, чтобы указать иконку и showAsAction флаги.

У кого-нибудь есть идеи?

ответ

21

Ok я взломал это сам с указателем в правильном направлении от EvilDuck. И да dymmeh вы правы, вы можете сделать это программно!

Что мне нужно для использования было комбинацией orderInCategory и menuCategory. Android, похоже, игнорирует orderInCategory, если у вас нет menuCategory.

  • я определил категорию каждого отдельного пункта меню в моем приложении, установив значение в menuCategory атрибута "system".
  • Мои элементы базового меню (те, которые загружаются через Activity) я должен был установить большое число orderInCategory, такие, как 10, 11, 12, 13 и т.д.
  • Когда я затем надувают и добавили дополнительный фрагмент XML меню с той же категорией и значением orderInCategory 1 он появился как первый элемент.
+0

Я использовал для пунктов меню _back_, которые раздуты самой деятельностью как категория ** 'secondary' **, и никакая категория для элементов _front_ моих фрагментов. Он работает (тестируется с эмуляторами от 2.3.7 до 4.4). Заказ в категории не используется. – WebDucer

4

Попробуйте использовать «Android: orderInCategory» атрибут пунктов меню

+0

Я пробовал это, к сожалению, это не имело никакого значения. –

+0

странный ..., который помогает мне переупорядочить элементы в ActionBar – EvilDuck

+0

См. Мой ответ (ниже/выше). Спасибо за вашу помощь. –

4

Я не уверен, где вы получаете, что вы не можете установить опцию showAsAction или значок программно например:

public void onCreateOptionsMenu(Menu menu) 
{ 
    menu.add(Menu.NONE, /** group ID.. not really needed unless you're working with groups **/ 
       0,   /** this is the items ID (get this in onOptionsItemSelected to determine what was clicked) **/ 
       Menu.NONE, /** ORDER.. this is what you want to change **/ 
       "Cancel") /** title **/ 
       .setIcon(R.drawable.ic_menu_cancel) 
       .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 
} 

Docs:

menu.add(int groupId, int itemId, int order, CharSequence title)

setShowAsAction(int actionEnum)

setIcon(int resId)

+0

вы понимаете, что зависит от целевой версии API, так? – EvilDuck

+0

Да. Он использует фрагменты + панель действий, что означает, что он либо использует API 11+, либо библиотеку совместимости для API 4+. Оба из них имеют методы, описанные мной – dymmeh

+0

Достаточно справедливо, хотя в библиотеке сопутствующих программ есть различные методы класса утилит для установки showAsAction на элементы меню. – EvilDuck

0

Все правильно, используйте только один код линии в onCreateView.

setHasOptionsMenu(true); 
Смежные вопросы