Створення дочірніх меню

Дочірні меню відображаються у вигляді звичайних об'єктів 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)

[... Обробка вибору пункту в меню ...]

Схожі статті