Xamarin Android 용 ActionBarActionBar for Xamarin.Android

TabActivity를 사용 하는 경우 Android 4.0 프레임 워크에 대해 실행 하면 탭 아이콘을 만드는 코드가 영향을 받지 않습니다.When using TabActivity, the code to create the tab icons has no effect when run against the Android 4.0 framework. 2.3 이전 버전의 Android에서와 같이 작동 하지만 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를 설정 하는 데 사용할 수 있는 Activity 클래스에서 사용할 수 있습니다.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. 이 탭 인스턴스를 사용 하 여 SetTextSetIcon 메서드를 호출 하 여 탭의 레이블 텍스트와 아이콘을 설정할 수 있습니다. 이러한 호출은 아래에 표시 된 코드에서 순서 대로 수행 됩니다.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. 이 예의 경우 조각 뷰에는 다음과 같이 Fragment 하위 클래스에서 확장 되는 단일 TextView포함 되어 있습니다.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는 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:

원숭이 이미지를 표시 하는 메시징 앱스크린샷Screenshot of messaging app displaying monkey image

동작 공급자 클래스 지정Specifying the action Provider Class

ShareActionProvider를 사용 하려면 다음과 같이 작업 모음 메뉴에 대 한 XML의 메뉴 항목에서 android:actionProviderClass 특성을 설정 합니다.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

메뉴를 확장 하기 위해 Activity 하위 클래스에서 OnCreateOptionsMenu를 재정의 합니다.To inflate the menu, we override OnCreateOptionsMenu in the Activity subclass. 메뉴에 대 한 참조가 있으면 아래와 같이 메뉴 항목의 ActionProvider 속성에서 ShareActionProvider을 가져온 다음 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. 이 경우 다음 코드를 사용 하 여 이미지를 보낼 의도를 만듭니다.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.