Xamarin.Android용 ActionBar

사용할 TabActivity때는 Android 4.0 프레임워크에 대해 실행할 때 탭 아이콘을 만드는 코드가 적용되지 않습니다. 기능적으로 2.3 TabActivity 이전의 Android 버전에서와 같이 작동하지만 클래스 자체는 4.0에서 더 이상 사용되지 않습니다. 다음에 논의할 작업 모음을 사용하는 탭 인터페이스를 만드는 새로운 방법이 도입되었습니다.

작업 표시줄 탭

작업 표시줄에는 Android 4.0에서 탭 인터페이스를 추가하기 위한 지원이 포함되어 있습니다. 다음 스크린샷은 이러한 인터페이스의 예를 보여줍니다.

에뮬레이터에서 실행되는 앱의 스크린샷 두 개의 탭이 표시됩니다.

작업 모음에서 탭을 만들려면 먼저 탭을 지원하도록 해당 NavigationMode 속성을 설정해야 합니다. Android 4 ActionBar 에서는 다음과 같이 설정하는 NavigationMode 데 사용할 수 있는 활동 클래스에서 속성을 사용할 수 있습니다.

this.ActionBar.NavigationMode = ActionBarNavigationMode.Tabs;

이 작업이 완료되면 작업 표시줄에서 메서드를 호출 NewTab 하여 탭을 만들 수 있습니다. 이 탭 인스턴스를 사용하면 메서드를 SetIcon 호출 SetText 하여 탭의 레이블 텍스트와 아이콘을 설정할 수 있습니다. 이러한 호출은 아래 표시된 코드에서 순서대로 수행됩니다.

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

그러나 탭을 추가하려면 이벤트를 처리 TabSelected 해야 합니다. 이 처리기에서 탭에 대한 콘텐츠를 만들 수 있습니다. 작업 표시줄 탭은 작업에서 사용자 인터페이스의 일부를 나타내는 클래스인 Fragments와 함께 작동하도록 설계되었습니다. 이 예제의 경우 조각 뷰에는 다음과 같이 하위 클래스에서 Fragment 팽창하는 단일 TextView항목이 포함됩니다.

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 이벤트 인수는 다음과 같이 조각을 추가하는 데 사용할 수 있는 속성을 포함하는 FragmentTransaction 형식TabEventArgs입니다.

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

마지막으로 이 코드와 같이 메서드를 호출하여 작업 표시줄에 AddTab 탭을 추가할 수 있습니다.

this.ActionBar.AddTab (tab);

전체 예제는 이 문서의 샘플 코드에서 HelloTabsICS 프로젝트를 참조하세요.

ShareActionProvider

ShareActionProvider 클래스를 사용하면 작업 모음에서 공유 작업을 수행할 수 있습니다. 공유 의도를 처리하고 나중에 작업 표시줄에서 쉽게 액세스할 수 있도록 이전에 사용한 애플리케이션의 기록을 유지하는 앱 목록을 사용하여 작업 보기를 만듭니다. 이를 통해 애플리케이션은 Android 전체에서 일관된 사용자 환경을 통해 데이터를 공유할 수 있습니다.

이미지 공유 예제

예를 들어 아래는 이미지를 공유할 메뉴 항목이 있는 작업 모음의 스크린샷입니다. 사용자가 작업 모음에서 메뉴 항목을 탭하면 ShareActionProvider는 애플리케이션을 로드하여 연결된 ShareActionProvider의도를 처리합니다. 이 예제에서는 메시징 애플리케이션이 이전에 사용되었으므로 작업 표시줄에 표시됩니다.

작업 모음의 메시징 애플리케이션 아이콘 스크린샷

사용자가 작업 표시줄에서 항목을 클릭하면 아래와 같이 공유 이미지가 포함된 메시징 앱이 시작됩니다.

원숭이 이미지를 표시하는 메시징 앱의 스크린샷

작업 공급자 클래스 지정

ShareActionProvider속성을 사용하려면 다음과 같이 작업 모음 메뉴에 대한 XML의 메뉴 항목에 특성을 설정합니다 android:actionProviderClass .

<?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>

메뉴 확장

메뉴를 확장하기 위해 활동 하위 클래스에서 재정 OnCreateOptionsMenu 의합니다. 메뉴에 대한 참조가 있으면 메뉴 항목의 속성에서 ActionProvider 가져와 ShareActionProvider 서 SetShareIntent 메서드를 사용하여 아래와 같이 '의도'를 설정할 ShareActionProvider수 있습니다.

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 ());
}

의도 만들기

ShareActionProvider 코드의 메서드에 SetShareIntent 전달된 의도를 사용하여 적절한 작업을 시작합니다. 이 경우 다음 코드를 사용하여 이미지를 보낼 의도를 만듭니다.

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;
}

위의 코드 예제의 이미지는 애플리케이션과 함께 자산으로 포함되고 활동을 만들 때 공개적으로 액세스할 수 있는 위치에 복사되므로 메시징 앱과 같은 다른 애플리케이션에서 액세스할 수 있습니다. 이 문서와 함께 제공되는 샘플 코드에는 이 예제의 전체 원본이 포함되어 있습니다.