給 ActionBar 增加分享功能

Android4.0 之后系統中 ActionProvider 的引入使在 ActionBar 中添加分享功能變得更為簡單。它會 handle 出現 share 功能的 appearance 與 behavior。在 ShareActionProvider 的例子里面,我們只需要提供一個 share intent,剩下的就交給 ShareActionProvider 來做。

1. 更新菜單聲明

使用ShareActionProvider的第一步,在 menu resources 對應 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. 設置分享的 intent

為了實現 ShareActionProvide r的功能,我們必須為它提供一個 intent。該 share intent 應該像第一課講的那樣,帶有 ACTION_SEND 和附加數據(例如 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. 去掉分享圖標右邊的最常分享應用圖標

  • 如上設置后,分享圖標右邊會出現一個最常分享應用圖標,因為會記錄分享歷史,并把最常分享的應用圖標顯示出來。
  • 可以如下設置,去掉這個圖標:
    @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);
        // 為了不在右邊顯示最常用應用圖標。暫未出現問題。
        ShareActionProvider shareActionProvider=new ShareActionProvider(this){
            @Override
            public View onCreateActionView() {
                return null;
            }
        };
        MenuItemCompat.setActionProvider(item,shareActionProvider);
        shareActionProvider.setShareIntent(shareIntent);
        return true;
    }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容