ActionBarActionBar

ОбзорOverview

При использовании TabActivity, код для создания значки вкладок не действует при использовании Android 4.0 framework.When using TabActivity, the code to create the tab icons has no effect when run against the Android 4.0 framework. Несмотря на то, что функционально он работает, как и в версиях Android ниже 2.3, TabActivity сам класс был объявлен устаревшим в 4.0.Although functionally it works as it did in versions of Android prior to 2.3, the TabActivity class itself has been deprecated in 4.0. Был введен новый способ создания интерфейс с вкладками, использующий панели действий, чем мы поговорим Далее.A new way to create a tabbed interface has been introduced that uses the Action Bar, which we'll discuss next.

Вкладки панели действийAction Bar Tabs

На панели действий включает в себя возможность добавить интерфейсы с вкладками в Android 4.0.The Action Bar includes support for adding tabbed interfaces in Android 4.0. На следующем рисунке показан пример такой интерфейс.The following screenshot shows an example of such an interface.

Снимок экрана: приложение, работающее в эмуляторе; отображаются две вкладкиScreenshot of app running in an emulator; two tabs are shown

Чтобы создать вкладки на панели действий, необходимо сначала задать его NavigationMode свойства для поддержки вкладки.To create tabs in the Action Bar, we first need to set its NavigationMode property to support tabs. В Android 4 ActionBar свойство доступно в классе действия, который можно использовать для задания NavigationMode следующим образом:In Android 4, an ActionBar property is available on the Activity class, which we can use to set the NavigationMode like this:

this.ActionBar.NavigationMode = ActionBarNavigationMode.Tabs;

После этого, можно создать вкладку путем вызова NewTab метода на панели действий.Once this is done, we can create a tab by calling the NewTab method on the Action Bar. С этим экземпляром вкладку, мы можем вызвать SetText и SetIcon методов, чтобы задать текст метки для вкладки и значком; эти вызовы выполняются в порядке, в коде, показанном ниже:With this tab instance, we can call the SetText and SetIcon methods to set the tab's label text and icon; these calls are made in order in the code shown below:

var tab = this.ActionBar.NewTab ();
tab.SetText (tabText);
tab.SetIcon (Resource.Drawable.ic_tab_white);

Прежде чем мы можем добавить вкладку тем не менее, необходимо обрабатывать TabSelected событий.Before we can add the tab however, we need to handle the TabSelected event. В этом обработчике мы можем создать содержимое для вкладки. Вкладки панели действий, предназначены для работы с фрагментов, которые являются классы, представляющие части пользовательского интерфейса в действии.In this handler, we can create the content for the tab. Action Bar tabs are designed to work with Fragments, which are classes that represent a portion of the user interface in an Activity. В этом примере фрагмент представление содержит один TextView, который мы расширения в наших Fragment подкласс следующим образом:For this example, the Fragment's view contains a single TextView, which we inflate in our Fragment subclass like this:

class SampleTabFragment: Fragment
{           
    public override View OnCreateView (LayoutInflater inflater,
        ViewGroup container, Bundle savedInstanceState)
    {
        base.OnCreateView (inflater, container, savedInstanceState);

        var view = inflater.Inflate (
            Resource.Layout.Tab, container, false);

        var sampleTextView =
            view.FindViewById<TextView> (Resource.Id.sampleTextView);            
        sampleTextView.Text = "sample fragment text";


        return view;
    }
}

Аргумент события, передаваемый в TabSelected событие имеет тип TabEventArgs, который включает FragmentTransaction свойство, которое можно использовать для добавления фрагмента, как показано ниже:The event argument passed in the TabSelected event is of type TabEventArgs, which includes a FragmentTransaction property that we can use to add the fragment as shown below:

tab.TabSelected += delegate(object sender, ActionBar.TabEventArgs e) {             
    e.FragmentTransaction.Add (Resource.Id.fragmentContainer,
        new SampleTabFragment ());
};

Наконец, можно добавить вкладку в панели действий путем вызова AddTab метод, как показано в этом коде:Finally, we can add the tab to the Action Bar by calling the AddTab method as shown in this code:

this.ActionBar.AddTab (tab);

Полный пример см. в разделе HelloTabsICS проекта в примере кода для этого документа.For the complete example, see the HelloTabsICS project in the sample code for this document.

ShareActionProviderShareActionProvider

ShareActionProvider Класс позволяет доступом действие должно выполняться из панели действий.The ShareActionProvider class enables a sharing action to take place from an Action Bar. Она отвечает за создание представления действий со списком приложений, которые может обрабатывать доступом намерения и ведет журнал ранее использовавшихся приложений для быстрого доступа к ним позже на панели действий.It takes care of creating an action view with a list of apps that can handle a sharing Intent and keeps a history of the previously used applications for easy access to them later from the Action Bar. Это позволяет приложениям обмениваться данными с помощью пользовательским интерфейсом, который используется на протяжении всего Android.This allows applications to share data via a user experience that's consistent throughout Android.

Пример совместного использования образаImage Sharing Example

Например, ниже приведен снимок экрана панели действий с помощью пункта меню для совместного использования образа (из ShareActionProvider пример).For example, below is a screenshot of an Action Bar with a menu item to share an image (taken from the ShareActionProvider sample). Когда пользователь касается элемента меню на панели действий, ShareActionProvider загружает в приложении для обработки объекта Intent, с которым связан ShareActionProvider.When the user taps the menu item on the Action Bar, the ShareActionProvider loads the application to handle an Intent that is associated with the ShareActionProvider. В этом примере приложение для обмена сообщениями уже использовалось, чтобы оно выводится на панели действий.In this example, the messaging application has been previously used, so it is presented on the Action Bar.

Снимок экрана обмена сообщениями значок приложения на панели действийScreenshot of messaging application icon in the Action Bar

Когда пользователь щелкает элемент в панели действий, обмена сообщениями, содержащий общего образа запускается приложение, как показано ниже:When the user clicks on the item in the Action Bar, the messaging app that contains the shared image is launched, as shown below:

Снимок экрана: отображение изображения monkey приложении для обмена сообщениямиScreenshot of messaging app displaying monkey image

Указав действие класс поставщикаSpecifying the action Provider Class

Чтобы использовать ShareActionProvider, задайте android:actionProviderClass атрибут для элемента в XML для меню на панели действий, следующим образом:To use the ShareActionProvider, set the android:actionProviderClass attribute on a menu item in the XML for the Action Bar's menu as follows:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:id="@+id/shareMenuItem"
      android:showAsAction="always"
      android:title="@string/sharePicture"
      android:actionProviderClass="android.widget.ShareActionProvider" />
</menu>

Подобных менюInflating the Menu

Для расширения в меню, мы переопределяем OnCreateOptionsMenu в подкласс действия.To inflate the menu, we override OnCreateOptionsMenu in the Activity subclass. Получив ссылку на меню, мы можем получить ShareActionProvider из ActionProvider свойство пункта меню и затем использовать метод SetShareIntent для задания ShareActionProviderего намерения, как показано ниже:Once we have a reference to the menu, we can get the ShareActionProvider from the ActionProvider property of the menu item and then use the SetShareIntent method to set the ShareActionProvider's Intent, as shown below:

public override bool OnCreateOptionsMenu (IMenu menu)
{
    MenuInflater.Inflate (Resource.Menu.ActionBarMenu, menu);       

    var shareMenuItem = menu.FindItem (Resource.Id.shareMenuItem);           
    var shareActionProvider =
       (ShareActionProvider)shareMenuItem.ActionProvider;
    shareActionProvider.SetShareIntent (CreateIntent ());
}

Создание целиCreating the Intent

ShareActionProvider Будет использовать намерения, передаваемый SetShareIntent метод в приведенном выше коде, чтобы запустить соответствующее действие.The ShareActionProvider will use the Intent, passed to the SetShareIntent method in the above code, to launch the appropriate Activity. В этом случае мы создадим объекта Intent, чтобы отправить изображение, используя следующий код:In this case we create an Intent to send an image by using the following code:

Intent CreateIntent ()
{  
    var sendPictureIntent = new Intent (Intent.ActionSend);
    sendPictureIntent.SetType ("image/*");
    var uri = Android.Net.Uri.FromFile (GetFileStreamPath ("monkey.png"));          
    sendPictureIntent.PutExtra (Intent.ExtraStream, uri);
    return sendPictureIntent;
}

Изображение в приведенном выше примере кода включена как ресурс с приложением и копируются в общедоступные расположение при создании действия, поэтому он будет доступен для других приложений, таких как приложения обмена сообщениями.The image in the code example above is included as an asset with the application and copied to a publicly accessible location when the Activity is created, so it will be accessible to other applications, such as the messaging app. Полный исходный этого примера, демонстрирующая ее использование содержится пример кода, сопровождающий эту статью.The sample code that accompanies this article contains the full source of this example, illustrating its use.