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