7.3 添加一個簡單的分享操作
隨着Android 4.0(API等級14)對ActionProvider的引入,在操作欄上實現有效且用戶友好的分享操作,變得更加簡單了。一個ActionProvider,一旦附在操作欄的某個菜單項,要同時處理該項的外觀和行爲。在使用ShareActionProvider的情況下,你只要提供了一個分享意圖,它會完成剩下的工作。
注: ShareActionProvider 只在API等級14和更高的版本中才開始可用。
圖1。相冊應用程序中的ShareActionProvider。
更新菜單聲明
開始使用ShareActionProviders時,首先在你的菜單資源文件爲對應的<item>
定義Android
:actionProviderClass
屬性:
<menu xmlns: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>
這代表該項中ShareActionProvider的外觀和功能職責 。但是,你需要告訴提供者(provider)你想要分享的東西。
設置分享意圖
爲了實現ShareActionProvider的功能,你必須給它提供一個分享意圖。這一分享意圖應該跟“將內容發送到其他應用程序”那節課所描述的一樣,使用ACTION_SEND操作並通過額外信息像EXTRA_TEXT和EXTRA_STREAM設置附加的數據。要指定一個分享意圖,當你在您的活動或片段中填充菜單資源時,首先找到相應的菜單項。接下來,調用MenuItem.getActionProvider()檢索一個ShareActionProvider實例。使用setShareIntent()更新與操作項關聯的意圖。下面是一個例子:
private
ShareActionProvider mShareActionProvider;
...
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflatemenu resource file.
getMenuInflater().inflate(R.menu.share_menu, menu);
// LocateMenuItem with ShareActionProvider
MenuItem item
= menu.findItem(R.id.menu_item_share);
// Fetch andstore ShareActionProvider
mShareActionProvider =
(ShareActionProvider) item.getActionProvider();
// Return trueto display menu
return true;
}
// Call to update the share intent
private void setShareIntent(Intent shareIntent)
{
if (mShareActionProvider
!= null)
{
mShareActionProvider.setShareIntent(shareIntent);
}
}
在菜單的創建過程中您可能只需要設置一次共享意圖,或者您可能想把它設置好,然後在UI變化時再更新它。例如,當您在相冊應用程序中全屏瀏覽照片時,切換照片分享意圖也會跟着變化。
有關ShareActionProvider對象的進一步討論,請查閱操作欄指南。