在你的ActionBar中實現一個有效且對方便使用的共用操作,甚至比在Android4.0(API Level 14)中引入的ActionProvider更加容易。ActionProvider一旦跟操作欄中的一個功能表項目綁定,該功能表項目會處理的外觀和行為。在ShareActionProvider中,你提供一個共用的Intent對象,其他事情都會由ShareActionProvider來處理。
注意:ShareActionProvider在API Level 14以後有效。
更新菜單聲明
要使用ShareActionProviders,就在你菜單資源檔中給對應的<item>元素定義android.actionProviderClass屬性:
<menuxmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_item_share"
android:showAsAction="ifRoom"
android:title="Share"
android:actionProviderClass="android.widget.ShareActionProvider" />
...
</menu>
這種委託負責該功能表項目的外觀和功能。但是你需要告訴該提供器你要共用的內容。
圖1.圖庫(Gallery)應用中的ShareActionProvider。
設定共用的Intent對象
為了讓ShareActionProvider指向一個功能,你必須給他提供一個共用的Intent對象。這個共用的Intent對象應該跟“把內容發送給其他應用程式”一課中介紹的相同,它帶有ACTION_SEND操作,以及通過EXTRA_TEXT和EXTRA_STREAM附加屬性設定的額外資料。要跟一個共用的Intent對象相關聯,首先要找到你的Activity或Fragment對象填充菜單時多對應的MenuItem對象。接下來調用MenuItem.getActionProvider()方法來擷取一個ShareActionProvider對象執行個體。使用setShareIntent()方法來更行跟操作項關聯的共用的Intent對象。例如:
privateShareActionProvider mShareActionProvider;
...
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate menu resource file.
getMenuInflater().inflate(R.menu.share_menu, menu);
// Locate MenuItem with ShareActionProvider
MenuItem item = menu.findItem(R.id.menu_item_share);
// Fetch and store ShareActionProvider
mShareActionProvider = (ShareActionProvider) item.getActionProvider();
// Return true to display menu
return true;
}
// Call to update the share intent
private void setShareIntent(Intent shareIntent) {
if (mShareActionProvider != null) {
mShareActionProvider.setShareIntent(shareIntent);
}
}
在你菜單建立期間,你只需設定共用的Intent對象,或者是UI改變時來設定並更新它。例如,當在圖庫應用中全屏瀏覽照片時,共用的Intent會在照片間切換時發生變化。
有關ShareActionProvider對象的詳細討論,請看Action Bar指南。