Этот урок научит вас
- Указание действий в XML
- Добавьте действия на панель действий
- Ответить на кнопки действий
- Добавить кнопку Вверх для деятельности нижнего уровня
Панель действий позволяет добавлять кнопки для наиболее важных действий, связанных с текущим контекстом приложения. Те, которые появляются непосредственно на панели действий с иконой и/или текстом известны как кнопки действий. Действия, которые не помещаются на панели действий или которые не являются достаточно важными, скрыты в переполнении действий.
Указание действий в XML
Все кнопки действий и другие элементы, доступные в переполнении действий определяются в XMLресурс меню. Для добавления действий в панель действий, создайте новый XML файл в вашем проекте в res/menu/
каталоге.
Добавьте <item>
элемент для каждого элемента, который вы хотите включить в панель действий. Например:
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <!-- Search, should appear as action button --> <item android:id="@+id/action_search" android:icon="@drawable/ic_action_search" android:title="@string/action_search" android:showAsAction="ifRoom" /> <!-- Settings, should always be in the overflow --> <item android:id="@+id/action_settings" android:title="@string/action_settings" android:showAsAction="never" /> </menu>
Скачайте иконки для панели действий
Для наилучшего соответствия Android иконография (руководящие принципы), вы должны использовать иконки, входящие вНабор иконок для панели действий.
Это объявляет, что действие Поиска должно появиться как кнопка действия, когда есть место в панели действий, но действие Настройки должно всегда проявляться в переполнении. (По умолчанию, все действия отображаются в переполнении, но хорошая практика явно объявлять ваши дизайнерские намерения для каждого действия.)
icon
атрибут требует идентификатор ресурса изображения. Имя, которое следует за @drawable/
должно быть именем растрового изображения, которое вы сохранили в вашем проекте вres/drawable/
каталоге. Например, "@drawable/ic_action_search"
указывает наic_action_search.png
. Аналогично, title
атрибут использует строковый ресурс, который определен в XML файле в вашем проекте в res/values/
каталоге, как описано в Построение простого пользовательского интерфейса.
Примечание: При создании иконок и других растровых изображений для вашего приложения, важно, что бы вы предоставляли несколько версий, каждая из которых оптимизирована для различной плотности экрана. Это обсуждается более детально в уроке Поддержка различных экранов.
Если ваше приложение использует Библиотеку Поддержки для совместимости версий, вплоть до Android 2.1, showAsAction
атрибут недоступен из android:
пространства имен. Вместо этого, атрибут предоставляется библиотекой поддержки и вы должны указать ваше собственное пространство имен XML, и использовать это пространство имен в качестве префикса атрибута. (Пользовательское пространство имен XML должно быть основано на имене вашего приложения, но может быть любым именем, которое вы захотите, и доступно только в рамках файла, в котором оно объявлено). Например:
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:yourapp="http://schemas.android.com/apk/res-auto" > <!-- Search, should appear as action button --> <item android:id="@+id/action_search" android:icon="@drawable/ic_action_search" android:title="@string/action_search" yourapp:showAsAction="ifRoom" /> ... </menu>
Добавьте действия на панель действий
Для размещения пунктов меню в панели действий, реализуйте onCreateOptionsMenu()
метод обратного вызова в вашей деятельности, чтобы наполнить ресурс меню через полученный Menu
объект. Например:
@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu items for use in the action bar MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_activity_actions, menu); return super.onCreateOptionsMenu(menu); }
Ответить на кнопки действий
Когда пользователь нажимает на одну из кнопок действий или другой элемент в переполнении действий, система вызывает в вашей деятельности onOptionsItemSelected()
метод обратного вызова. В вашей реализации этого метода, вызовите getItemId()
у переданного MenuItem
для определения, какой элемент была нажата—возвращаемый идентификатор соответствует значению, которое вы объявили в соответствующем <item>
элементе в android:id
атрибуте.
@Override public boolean onOptionsItemSelected(MenuItem item) { // Handle presses on the action bar items switch (item.getItemId()) { case R.id.action_search: openSearch(); return true; case R.id.action_settings: openSettings(); return true; default: return super.onOptionsItemSelected(item); } }
Добавить кнопку Вверх для деятельности нижнего уровня
Все экраны в вашем приложении, кроме главного входа в ваше приложение (деятельности, которые не являются «домашним» экраном) должны предложить пользователю способ навигации на экран логического родителя в иерархии приложения, нажав кнопку Вверх на панели действий.
При работе с Android 4.1 (Уровень API 16) или выше, или при использовании ActionBarActivity
из Библиотеки Поддержки, выполнение навигации Вверх просто требует, чтобы вы объявили родительскую деятельность в файле манифеста и включили кнопкуВверх для панели действий.
Например, вот как можно объявить родителя деятельности в манифесте:
<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.DisplayMessageActivity" android:label="@string/title_activity_display_message" 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>
Затем включите значок приложения в качестве кнопки Вверх вызвав setDisplayHomeAsUpEnabled()
:
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_displaymessage); getSupportActionBar().setDisplayHomeAsUpEnabled(true); // If your minSdkVersion is 11 or higher, instead use: // getActionBar().setDisplayHomeAsUpEnabled(true); }
Поскольку система теперь знает, что MainActivity
является родительской деятельностью дляDisplayMessageActivity
, когда пользователь нажимает кнопку Вверх , система переходит к родительской деятельности в соответствующих случаях—вы не должны обрабатывать Вверх событие кнопки.