Android4.0(以降ICS)のActionBarには、共有ボタンで共有機能を使用したことのあるアプリのアイコンを、ActionBarのMenuItemに追加することができるようになりました。
詳細は以下から。
共有履歴をActionBarに追加するために今回は以下の流れに沿って解説します。
- 共有履歴を表示するスペースの確保
- ShareActionProviderの設定
まずは共有したアプリのMenuItemを格納するための領域をmenuのレイアウトファイルで確保します。
共有履歴を表示するスペースの確保
action_bar_action_provider.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/menu_item_share_action_provider_action_bar" android:showAsAction="always" android:title="@string/action_bar_share_with" android:actionProviderClass="android.widget.ShareActionProvider" /> <item android:id="@+id/menu_item_share_action_provider_overflow" android:showAsAction="never" android:title="@string/action_bar_share_with" android:actionProviderClass="android.widget.ShareActionProvider" /> </menu>
3〜6行目は最初から表示しておく共有機能のMenuItemです。
8〜11行目が一度使用した共有先アプリを記憶するためのMenuItemです。
ポイントはandroid:actionProviderClass属性にandroid.widget.ShareActionProviderを指定することです。
ShareActionProviderクラスを使用するためにはこの記述が必要です。
ShareActionProviderクラスはICSから追加されたクラスで、MenuItemで共有された各IntentのActionを管理するための機能を提供します。
また、ShareActionProviderクラスはActionごと、データの種類(テキスト、画像等)ごとに作成することができ、それぞれの共有の履歴をActionBarに表示させることが可能です。
ShareActionProviderの設定
次にコードで、ShareActionProviderに共有するIntentのActionの指定、共有アプリの履歴の保存先の指定を行います。
Actionbar.java
@Override public boolean onCreateOptionsMenu(Menu menu) { // menuファイルの読み込み getMenuInflater().inflate(R.menu.action_bar_action_provider, menu); MenuItem actionItem = menu.findItem(R.id.menu_item_share_action_provider_action_bar); ShareActionProvider actionProvider = (ShareActionProvider) actionItem.getActionProvider(); actionProvider.setShareHistoryFileName(ShareActionProvider.DEFAULT_SHARE_HISTORY_FILE_NAME); Intent shareIntent = new Intent(Intent.ACTION_SEND); shareIntent.setAction(Intent.ACTION_SEND); shareIntent.setType("text/plain"); shareIntent.putExtra(Intent.EXTRA_TEXT, "aaa"); actionProvider.setShareIntent(shareIntent); MenuItem overflowItem = menu.findItem(R.id.menu_item_share_action_provider_overflow); ShareActionProvider overflowProvider = (ShareActionProvider) overflowItem.getActionProvider(); overflowProvider.setShareHistoryFileName( ShareActionProvider.DEFAULT_SHARE_HISTORY_FILE_NAME); overflowProvider.setShareIntent(shareIntent); return true; }
ShareActionProviderクラスの設定はonCreateOptionsMenu内で行います。
5〜8行目と14行目は最初から表示させておくMenuItemで、17〜22行目は共有履歴を表示するためのMenuItemです。
ではgetActionProviderメソッドを使用してMenuItemのShareActionProviderインスタンスを取得しています。
ここで取得したShareActionProviderインスタンスに対して、共有履歴の保存先と共有するIntentのActionを指定していきます。
8行目では共有履歴の保存先ファイル名をsetShareHistoryFileNameメソッドで指定しています。
setShareHistoryFileNameメソッドの引数には保存先のファイル名を指定します。
基本的にはShareActionProvider#DEFAULT_SHARE_HISTORY_FILE_NAME定数に保持されているファイル名で問題ありません。
19〜20行目では上記と同じ内容を共有履歴を表示するためのMenuItemに設定しています。
14行目ではShareActionProviderインスタンスに共有するIntentを指定しています。
サンプルではActionがIntent#ACTION_SEND、データが”text/plain”の受け口を持っているアプリへ共有できるようにしています。
22行目では上記と同じ内容を共有履歴を表示するためのMenuItemに設定しています。