Android4.0 之后系統(tǒng)中 ActionProvider 的引入使在 ActionBar 中添加分享功能變得更為簡單丰涉。它會 handle 出現(xiàn) share 功能的 appearance 與 behavior。在 ShareActionProvider 的例子里面淆院,我們只需要提供一個 share intent何乎,剩下的就交給 ShareActionProvider 來做。
1. 更新菜單聲明
使用ShareActionProvider的第一步土辩,在 menu resources 對應(yīng) 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>
2. 設(shè)置分享的 intent
為了實現(xiàn) ShareActionProvide r的功能,我們必須為它提供一個 intent拷淘。該 share intent 應(yīng)該像第一課講的那樣各墨,帶有 ACTION_SEND 和附加數(shù)據(jù)(例如 EXTRA_TEXT 與 EXTRA_STREAM)的。使用 ShareActionProvider 的例子如下:
private ShareActionProvider 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);
}
}
3. 去掉分享圖標右邊的最常分享應(yīng)用圖標
- 如上設(shè)置后贬堵,分享圖標右邊會出現(xiàn)一個最常分享應(yīng)用圖標结洼,因為會記錄分享歷史,并把最常分享的應(yīng)用圖標顯示出來松忍。
- 可以如下設(shè)置,去掉這個圖標:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_news,menu);
if(isFavourite){
menu.findItem(R.id.menu_news_fav).setIcon(R.drawable.fav_selected);
}
MenuItem item=menu.findItem(R.id.menu_news_share);
// 為了不在右邊顯示最常用應(yīng)用圖標宏所。暫未出現(xiàn)問題摊溶。
ShareActionProvider shareActionProvider=new ShareActionProvider(this){
@Override
public View onCreateActionView() {
return null;
}
};
MenuItemCompat.setActionProvider(item,shareActionProvider);
shareActionProvider.setShareIntent(shareIntent);
return true;
}