21
Action Bar Олег Годовых

Android - 08 - Action bar

  • Upload
    noveo

  • View
    758

  • Download
    0

Embed Size (px)

DESCRIPTION

Action bar functionality and possiblbities

Citation preview

Page 1: Android - 08 - Action bar

Action Bar

Олег Годовых

Page 2: Android - 08 - Action bar

Action Bar

Навигационная панель в верхней части приложения

1. Иконка + кнопка Up — навигация по приложению.2. View control — переключение между View (вкладки,выпадающий список) или заголовок.

3. Action buttons — наиболее важные функции.4. Action overflow — все остальные функции, не попавшие вAction buttons.

2 Action Bar

Page 3: Android - 08 - Action bar

Навигация

I Всё должно быть предсказуемо.I До Android 3.0 был толькозаголовок и вся навигацияосуществлялась с помощьюкнопки «back».

I В Android 3.0 появились Actionbar и кнопка «up».

3 Action Bar

Page 4: Android - 08 - Action bar

Back

I Навигация в обратном хронологическом порядке черезисторию экранов.

I Может закрыть приложение.I Может вернуть пользователя в другое приложение

4 Action Bar

Page 5: Android - 08 - Action bar

Up

I Навигация на основе иерархических отношений междуэкранами.

I Отсутствует на самом верхнем экране.I Даёт гарантию, что пользователь останется внутриприложения.

5 Action Bar

Page 6: Android - 08 - Action bar

Up vs. Back

I Передвижение междуразными беседамипроисходит в рамкаходного экрана.

I Поведение Up и Back будетодинаковым.

6 Action Bar

Page 7: Android - 08 - Action bar

Up vs. Back

I Back проводитпользователя через всепосещённые экраны (Book1 и Book 2 на одномуровне иерархии).

I Up выводит сразу уровнемвыше, к списку книг.

7 Action Bar

Page 8: Android - 08 - Action bar

Up vs. Back

I Back снова проводитпользователя через всепосещённые экраны.

I Up переводит к ранеенепосещённому экрану,который являетсяродителем в иерархии утекущего.

8 Action Bar

Page 9: Android - 08 - Action bar

Подключаем Action Bar в Android 3.0 и выше

В AndroidManifest.xml<activity android:theme= "@android:style/Theme.Holo"...>

В коде наследуемся от ActionBarActivity.Получить Action Bar:import android.app.ActionBar;...ActionBar actionBar = getActionBar();

Скрыть Action Bar:Из ресурсов:<activity android:theme="@android:style/Theme.Holo.NoActionBar" ... >

Из кода:ActionBar actionBar = getActionBar();actionBar.hide();

9 Action Bar

Page 10: Android - 08 - Action bar

Подключаем Action Bar в Android 2.1 с Support Library

В AndroidManifest.xml<activity android:theme= "@android:style/Theme.AppCompat.Light"...>

В коде наследуемся от ActionBarActivity.Получить Action Bar:import android.support.v7.app.ActionBar;...ActionBar actionBar = getSupportActionBar();

Скрыть Action Bar:Из ресурсов:<activity android:theme="@android:style/Theme.AppCompat.Light.NoActionBar" ... >

Из кода:ActionBar actionBar = getSupportActionBar();actionBar.hide();

10 Action Bar

Page 11: Android - 08 - Action bar

Отображение Action Bar

I ЗаголовокactionBar.setTitle("TestApp");

I Кнопка «Up»actionBar.setDisplayHomeAsUpEnabled(true);

I Своя ViewactionBar.setCustomView(R.layout.custom_view);actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);

11 Action Bar

Page 12: Android - 08 - Action bar

Action Buttons

Переопределяем методы в activity:I onCreateOptionsMenu(Menu menu);

<menu xmlns:android="http://schemas.android.com/apk/res/android><item android:id="@+id/action_search"

android:icon="@drawable/search_icon"android:title="@string/action_search"android:showAsAction="ifRoom|withText"/>

</menu>

I onOptionsItemSelected(MenuItem item);

title нужно задавать всегда (может отображаться в меню)

12 Action Bar

Page 13: Android - 08 - Action bar

Action Buttons

Для Android 2.1 надо будет прописать namespace.<menu xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:yourapp="http://schemas.android.com/apk/res-auto">

<item android:id="@+id/action_search"android:icon="@drawable/ic_action_search"android:title="@string/action_search"yourapp:showAsAction="ifRoom" />

...</menu>

13 Action Bar

Page 14: Android - 08 - Action bar

Action Buttons

android:showAsActionI never — элемент никогда не присутствует на ActionBar.I ifRoom — элемент показывается на ActionBar, если емухватает там места.

I always — всегда показывать элемент на ActionBar,использовать лишь для самых важных.

I withText — показывать элемент вместе с текстом.

14 Action Bar

Page 15: Android - 08 - Action bar

Навигация списком

I Задаём AdapterString[] data = new String[] { "one", "two", "three" };actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);ArrayAdapter<String> adapter = new ArrayAdapter<String>

(this, android.R.layout.simple_spinner_item, data);adapter.setDropDownViewResource(

android.R.layout.simple_spinner_dropdown_item);actionBar.setListNavigationCallbacks(adapter, this);

I Реализуем интерфейс, чтобы отслежитьнажатие на элементы списка:... implements ActionBar.OnNavigationListener...@Overridepublic boolean onNavigationItemSelected(

int itemPosition, long itemId) {

return false;}

15 Action Bar

Page 16: Android - 08 - Action bar

Навигация вкладками

I Создаём вкладки:actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TAB);

ActionBar.Tab tab1 = actionBar.newTab();tab1.setText("tab1");tab1.setTabListener(this);actionBar.addTab(tab1);...

I Реализуем интерфейс для отслеживания нажатий:... implements ActionBar.TabListener...public void onTabSelected(ActionBar.Tab tab, FragmentTransaction

fragmentTransaction) { // вкладка выбрана в первый раз}public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction

fragmentTransaction) { // вкладка перестаёт быть выбранной}public void onTabReselected(ActionBar.Tab tab, FragmentTransaction

fragmentTransaction) { // повторное нажатие на выбранную вкладку}

16 Action Bar

Page 17: Android - 08 - Action bar

Split Action Bar

<manifest ...><activity uiOptions="splitActionBarWhenNarrow" ... >

<meta-data android:name="android.support.UI_OPTIONS"android:value="splitActionBarWhenNarrow" />

</activity></manifest>

17 Action Bar

Page 18: Android - 08 - Action bar

Action View

Виджет, заменяющий кнопкупри нажатии

Объявление в файле меню:<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:yourapp="http://schemas.android.com/apk/res-auto" ><item android:id="@+id/action_search"

android:title="@string/action_search"android:icon="@drawable/ic_action_search"yourapp:showAsAction="ifRoom|collapseActionView"yourapp:actionViewClass="android.support.v7.widget.SearchView" />

</menu>

18 Action Bar

Page 19: Android - 08 - Action bar

Action View

@Overridepublic boolean onCreateOptionsMenu(Menu menu) {

getMenuInflater().inflate(R.menu.main_activity_actions, menu);MenuItem searchItem = menu.findItem(R.id.action_search);SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);// API 11+// SearchView searchView = menu.findItem(R.id.action_search).getActionView();

MenuItemCompat.setOnActionExpandListener(menuItem, new OnActionExpandListener() {@Overridepublic boolean onMenuItemActionCollapse(MenuItem item) {

return true; // сворачивается}

@Overridepublic boolean onMenuItemActionExpand(MenuItem item) {

return true; // и разворачивается}

});

return super.onCreateOptionsMenu(menu);}

19 Action Bar

Page 20: Android - 08 - Action bar

Кастомизация

Чтобы поменять стиль ActionBar, задаем приложению свойстиль:<style name="Theme.CustomActionBar" parent="android:style/Theme.Holo.Light">...</style>

<activity android:theme="@style/Theme.CustomActionBar" ... >

http://jgilfelt.github.io/android-actionbarstylegenerator/

20 Action Bar

Page 21: Android - 08 - Action bar

Полезные ссылки

I http://developer.android.com/design/patterns/navigation.html

I http://developer.android.com/guide/topics/ui/actionbar.html

I http://developer.android.com/design/patterns/actionbar.html

I http://developer.android.com/training/basics/actionbar/index.html

I http://www.androiduipatterns.com

21 Action Bar