| page.title=Adding an Easy Share Action |
| parent.title=Sharing Content |
| parent.link=index.html |
| |
| trainingnavtop=true |
| previous.title=Receiving Simple Data from Other Apps |
| previous.link=receive.html |
| |
| @jd:body |
| |
| <div id="tb-wrapper"> |
| <div id="tb"> |
| |
| <!-- table of contents --> |
| <h2>This lesson teaches you to</h2> |
| <ol> |
| <li><a href="#update-menus">Update Menu Declarations</a></li> |
| <li><a href="#set-share-intent">Set the Share Intent</a></li> |
| </ol> |
| |
| <!-- other docs (NOT javadocs) --> |
| <h2>You should also read</h2> |
| <ul> |
| <li><a href="{@docRoot}training/appbar/action-views.html">Action Views and |
| Action Providers</a></li> |
| </ul> |
| |
| </div> |
| </div> |
| |
| |
| <p>Implementing an effective and user friendly share action in your {@link android.app.ActionBar} |
| is made even easier with the introduction of {@link android.view.ActionProvider} in Android 4.0 |
| (API Level 14). An {@link android.view.ActionProvider}, once attached to a menu item in the action |
| bar, handles both the appearance and behavior of that item. In the case of {@link |
| android.widget.ShareActionProvider}, you provide a share intent and it does the rest.</p> |
| |
| <p class="note"><strong>Note: </strong> {@link android.widget.ShareActionProvider} is available |
| starting with API Level 14 and higher.</p> |
| |
| |
| <div class="figure" style="width:200px"> |
| <img src="{@docRoot}images/ui/actionbar-shareaction.png" alt="" id="figure1" /> |
| <p class="img-caption"> |
| <strong>Figure 1.</strong> The {@link android.widget.ShareActionProvider} in the Gallery app. |
| </p> |
| </div> |
| |
| <h2 id="update-menus">Update Menu Declarations</h2> |
| |
| <p> |
| To get started with {@link android.widget.ShareActionProvider ShareActionProviders}, |
| define the <code>android:actionProviderClass</code> attribute for the corresponding |
| <code><item></code> in your <a href="{@docRoot}guide/topics/resources/menu-resource.html" |
| >menu resource</a> file:</p> |
| |
| <pre> |
| <menu xmlns:android="http://schemas.android.com/apk/res/android"> |
| <item |
| android:id="@+id/menu_item_share" |
| android:showAsAction="ifRoom" |
| android:title="Share" |
| <b>android:actionProviderClass= |
| "android.widget.ShareActionProvider"</b> /> |
| ... |
| </menu> |
| </pre> |
| |
| <p> |
| This delegates responsibility for the item's appearance and function to |
| {@link android.widget.ShareActionProvider}. However, you will need to tell the provider what you |
| would like to share. |
| </p> |
| |
| |
| <h2 id="set-share-intent">Set the Share Intent</h2> |
| |
| <p> |
| In order for {@link android.widget.ShareActionProvider} to function, you must provide it a share |
| intent. This share intent should be the same as described in the |
| <a href="{@docRoot}training/sharing/send.html">Sending Simple Data to Other Apps</a> lesson, |
| with action {@link android.content.Intent#ACTION_SEND} and additional data set via extras |
| like {@link android.content.Intent#EXTRA_TEXT} and {@link android.content.Intent#EXTRA_STREAM}. |
| To assign a share intent, first find the corresponding {@link android.view.MenuItem} while |
| inflating your menu resource in your {@link android.app.Activity} or |
| {@link android.app.Fragment}. Next, call {@link android.view.MenuItem#getActionProvider |
| MenuItem.getActionProvider()} to retrieve an instance of |
| {@link android.widget.ShareActionProvider}. Use |
| {@link android.widget.ShareActionProvider#setShareIntent(android.content.Intent) |
| setShareIntent()} to update the share intent associated with that action item. Here's an |
| example: |
| </p> |
| |
| <pre> |
| 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); |
| } |
| } |
| </pre> |
| |
| <p>You may only need to set the share intent once during the creation of your menus, or you may |
| want to set it and then update it as the UI changes. For example, when you view photos full screen |
| in the Gallery app, the sharing intent changes as you flip between photos.</p> |
| |
| <p>For further discussion about the {@link android.widget.ShareActionProvider} |
| object, see <a href="{@docRoot}training/appbar/action-views.html">Action Views |
| and Action Providers</a>.</p> |
| |
| |