Панель додатків дозволяє додавати кнопки для дій користувача. Ця функція дозволяє розміщувати найважливіші actions (дії) для поточного контексту прямо у верхній частині програми.
Наприклад, додаток перегляду фотографій може показувати кнопки share (спільний доступ) і create album (створити альбом) у верхній частині, коли користувач дивиться свої фоторолики; коли користувач переглядає окреме фото, програма може показувати кнопки crop (обрізання) та filter (фільтр).
Простір на панелі додатку обмежений. Якщо додаток вимагає більше дій, ніж може вписатися на панелі додатку, то панель додатків надсилає такі дії до меню overflow (яке відкривається). Додаток також може вказувати, що дія повинна завжди відображатися в меню overflow, а не відображатися на панелі додатку.
Рис 1. Панель додатку з однією кнопкою дії та меню, яке відкривається.
додавання кнопки дії
Усі кнопки дій та інші елементи, доступні для меню переповнення дій, визначаються в ресурсі меню XML. Щоб додати дії до меню дій, створіть новий файл XML у каталозі res/menu/ свого проекту.
Додайте елемент <item> для кожного елемента, який хочете мати на панелі дій, як показано в наведеному нижче прикладі коду XML-файла меню:
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- "Mark Favorite", should appear as action button if possible -->
<item
android:id="@+id/action_favorite"
android:icon="@drawable/ic_favorite_black_48dp"
android:title="@string/action_favorite"
app:showAsAction="ifRoom"/>
<!-- Settings, should always be in the overflow -->
<item android:id="@+id/action_settings"
android:title="@string/action_settings"
app:showAsAction="never"/>
</menu>
Атрибут app:showAsAction вказує, чи повинна дія відображатися як кнопка на панелі додатку. Якщо ви встановите app:showAsAction="ifRoom" (як у наведеному вище прикладі коду в розділі favorite), дія відображається як кнопка, якщо є місце на панелі додатку; якщо ж місця недостатньо, надлишкові дії надсилаються в меню переповнення. Якщо ви встановите додаток: app:showAsAction="never" (як у прикладі коду дій settings), дія завжди відображається в меню переповнення, яке не відображається на панелі додатку.
Якщо дія відображається на панелі додатку, система використовує піктограму дії як кнопку дії. Ви можете знайти багато корисних значків на сторінці MaterialIcons.
Реакція на дії
Коли користувач вибирає один з елементів панелі додатку, система викликає метод onOptionsItemSelected() дії вашої activity і передає об'єкт MenuItem, щоб вказати, на який елемент було натиснуто. При виконанні onOptionsItemSelected(), викликається метод MenuItem.getItemId(), щоб визначити, який елемент було натиснуто. Повернутий ідентифікатор відповідає значенню, оголошеному у атрибуті android:id відповідного елемента <item>.
Наприклад, наступний код перевіряє, які дії вибрав користувач. Якщо метод не розпізнає дію користувача, то він викликає метод суперкласу:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_settings:
// User chose the "Settings" item, show the app settings UI...
return true;
case R.id.action_favorite:
// User chose the "Favorite" action, mark the current item
// as a favorite...
return true;
default:
// If we got here, the user's action was not recognized.
// Invoke the superclass to handle it.
return super.onOptionsItemSelected(item);
}
}
додавання дії up
Ваш додаток має полегшити користувачам можливість повернутися до головного екрана програми. Одним із простих способів зробити це - забезпечити кнопку Up на панелі програм для всіх дій, крім основної. Коли користувач вибирає кнопку Up, додаток переходить до батьківської activity.
Покажемо, як додати кнопку Up до activity, оголосивши батьківську activity у маніфесті та ввімкнувши кнопку activity на панелі додатку.
оголошуємо батьківську activity
Щоб підтримувати функціональні можливості Up для activity, потрібно оголосити батьків цієї activity. Ви можете зробити це в маніфесті програми, встановивши атрибут android:parentActivityName.
Атрибут android:parentActivityName був введений в Android 4.1 (16 рівень API). Щоб підтримувати пристрої зі старішими версіями Android, визначте пару "ім'я-значення" <meta-data>
, де ім'я "android.support.PARENT_ACTIVITY", а значення - ім'я батьківської activity.
Наприклад, припустімо, що у вашому додатку є основна activity, яка називається MainActivity та одна дитяча activity. Наступний код маніфесту оголошує обидві activity та вказує відносини батько/дитина:
<application ... >
...
<!-- The main/home activity (it has no parent activity) -->
<activity
android:name="com.example.myfirstapp.MainActivity" ...>
...
</activity>
<!-- A child of the main activity -->
<activity
android:name="com.example.myfirstapp.MyChildActivity"
android:label="@string/title_activity_child"
android:parentActivityName="com.example.myfirstapp.MainActivity" >
<!-- Parent activity meta-data to support 4.0 and lower -->
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.myfirstapp.MainActivity" />
</activity>
</application>
вмикаємо кнопку up
Щоб увімкнути кнопку Up для activity, яка має батьківську activity, викликаємо метод setDisplayHomeAsUpEnabled()
на панелі додатка. Як правило, це робиться при створенні activity. Наприклад, наступний метод onCreate()
налаштовує Toolbar
як панель додатка для MyChildActivity, а потім дозволяє цю панель додатку кнопкою Up:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_child);
// my_child_toolbar is defined in the layout file
Toolbar myChildToolbar =
(Toolbar) findViewById(R.id.my_child_toolbar);
setSupportActionBar(myChildToolbar);
// Get a support ActionBar corresponding to this toolbar
ActionBar ab = getSupportActionBar();
// Enable the Up button
ab.setDisplayHomeAsUpEnabled(true);
}
Вам не потрібно задавати дію Up в методі onOptionsItemSelected()
. Замість цього даний метод повинен викликати його суперклас, як показано вище. Метод суперкласу реагує на вибір Up, переміщуючись у батьківську activity, як зазначено в маніфесті програми.
Попередній урок – Наступний урок
(Оновлено 22.10.2017)
(Джерело: developer.android.com)