Дочірні меню відображаються у вигляді звичайних об'єктів MenuItems, при виборі яких з'являються нові пункти. У традиційних систе- мах дочірні меню виводяться на екран в якості деревовидної ієрархії. Але Android використовує інший підхід, спрощуючи процес навігації по меню на пристроях з невеликими екранами. Замість деревовидної структури при виборі дочірнього меню з'являється єдине спливаюче вікно, яке відображає всі пункти.
Додати дочірнє меню можна за допомогою методу addSubMenu. Він під- тримувати той же набір параметрів, що і метод add, застосовуваний при додаванні звичайних пунктів, дозволяє вказувати групу, унікальний ідентифікатор і текстовий рядок для кожного дочірнього меню. Ви також можете використовувати методи setHeaderIcon і setIcon для завдання изобра- жений, які будуть виводитися в заголовній рядку спливаючого вікна і в меню зі значками відповідно.
Об'єкти MenuItem в даному випадку підтримують ті ж параметри, що і пункти для інших видів меню (розширених і зі значками). Однак на відміну від традиційних систем вкладені меню в Android НЕ поддер- живаються.
У наступному фрагменті коду представлена витяг з реалізації обробника onCreateMenuOptions - додавання дочірнього меню в головне. При цьому для дочірнього меню створюється новий пункт і встановлюється заголовки значок.
SubMenu sub = menu.addSubMenu (0, 0, Menu.NONE, "Submenu"); sub.setHeaderIcon (R.drawable.icon); sub.setIcon (R.drawable.icon);
MenuItem submenuItem = sub.add (0, 0, Menu.NONE, "Submenu Item");
Використання контекстного меню
Контекстне меню прив'язується до виділеного Поданню і виводи- диться на екран при натисканні трекболу, середньої кнопки маніпулятора D-pad або на елемент інтерфейсу (останній повинен утримуватися протягом приблизно трьох секунд).
Заповнення контекстних і головних меню багато в чому схоже. Є два способи створити контекстне меню для конкретного Уявлення.
Створення контекстного меню. Перший підхід - створення узагальненого об'єкта ContextMenu для класу View, в якому переопределяется обра- робником onCreateContextMenu, як показано нижче:
public void onCreateContextMenu (ContextMenu menu) Контекстне меню буде доступно всередині Активності, що містить цей клас View. Ширше використовується створення контекстних меню для конкретних активних шляхом перевизначення обробника onCreateContextMenu і реєстрації за допомогою методу registerForContextMenu уявлень, які це меню можуть використовувати. Даний процес показаний в ли- Стінг 4.29. Лістинг 4.29. Призначення контекстного меню для Уявлення public void onCreate (Bundle savedInstanceState)
EditText view = new EditText (this); Після реєстрації Уявлення обробник onCreateContextMenu буде спрацьовувати при першому відображенні контекстного меню для цього об'єкта View. Перевизначите метод onCreateContextMenu і перевірте, яке саме Подання його викликало, щоб мати можливість заповнити меню соот- відповідне пунктами, як показано в додатку до лістингу 4.29: public void onCreateContextMenu (ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)
super.onCreateContextMenu (menu, v, menuInfo); menu.add (0, menu.FIRST, Menu.NONE, menu.add (0, menu.FIRST + 1, Menu.NONE, "Item 2"). setCheckable (true); menu.add (0, menu.FIRST + 2, Menu.NONE, "Item 3"). setShortcut ( '3', '3'); SubMenu sub = menu.addSubMenu ( "Submenu"); Як видно з прикладу класи ContextMenu і Menu підтримують один і той же метод add, тому спосіб заповнення цих видів меню нічим не відрізняється. Зауважте, що значки при цьому відображатися не будуть. Од-нако ви можете вказати назву і значок, які будуть виводитися в за- головочний рядку контекстного меню. Android також підтримує динамічне заповнення контекстних меню за допомогою фільтрів намірів. Даний механізм дозволяє запов- нять контекстні меню, вказуючи, який тип даних представляє поточний об'єкт View, і опитуючи інші додатки на предмет будь-яких дей-наслідком для нього. Найбільш яскравий приклад цього механізму - пункти меню. / ?? -. /. доступні в елементах EditText. Використання фільтрів намірів для заповнення контекстних меню докладно розглядається в наступному розділі. Вибір пунктів контекстного меню обробляється так само, як і в меню для активних. Ви можете прикріплювати Наміри або інтерфейс OnMenuItemClickListener безпосередньо до кожного об'єкту MenuItem, а так-же втілити більш кращий підхід - перевизначення методу onContextItemSelected, що належить Активності. Даний обробник подій спрацьовує кожного разу, коли в контекст ном меню вибирається якийсь пункт. public boolean onContextItemSelected (MenuItem item)
[... Обробка вибору пункту в меню ...]Схожі статті