Most visited

Recently visited

ShareActionProvider

public class ShareActionProvider
extends ActionProvider

java.lang.Object
   ↳ android.support.v4.view.ActionProvider
     ↳ android.support.v7.widget.ShareActionProvider


提供适用于活动应用栏的分享操作。 创建启用数据共享的视图。 如果供应商出现在溢出菜单中,它将创建一个具有适当共享操作的子菜单。

Adding a share action

要将“分享”操作添加到您的活动中,请将ShareActionProvider放入应用栏的菜单资源中。 例如:

 <item android:id="@+id/action_share"
      android:title="@string/share"
      app:showAsAction="ifRoom"
      app:actionProviderClass="android.support.v7.widget.ShareActionProvider"/>
 

您不需要指定图标,因为ShareActionProvider小部件会关注其自身的外观和行为。 但是,如果操作在溢出菜单中结束,您需要指定一个标题为android:title的标题。

接下来,设置包含您的活动能够共享的内容的意图。 您应该在您的处理程序中为onCreateOptionsMenu()创建此意图,并在每次共享内容更改时更新它。 建立意图:

  1. Get a reference to the ShareActionProvider by calling getActionProvider() and passing the share action's MenuItem. For example:
     MenuItem shareItem = menu.findItem(R.id.action_share);
     ShareActionProvider myShareActionProvider =
         (ShareActionProvider) MenuItemCompat.getActionProvider(shareItem);
  2. Create an intent with the ACTION_SEND action, and attach the content shared by the activity. For example, the following intent shares an image:
     Intent myShareIntent = new Intent(Intent.ACTION_SEND);
     myShareIntent.setType("image/*");
     myShareIntent.putExtra(Intent.EXTRA_STREAM, myImageUri);
  3. Call setShareIntent() to attach this intent to the action provider:
     myShareActionProvider.setShareIntent(myShareIntent);
     
  4. When the content changes, modify the intent or create a new one, and call setShareIntent() again. For example:
     // Image has changed! Update the intent:
     myShareIntent.putExtra(Intent.EXTRA_STREAM, myNewImageUri);
     myShareActionProvider.setShareIntent(myShareIntent);

Share target rankings

基于用户选择每个目标的频率,共享操作提供程序会为每个共享目标保留一个排名。 用户选择目标的频率越高,排名越高; 最常用的目标会出现在应用程序栏中作为默认目标。

默认情况下,目标排名信息存储在名称为DEFAULT_SHARE_HISTORY_FILE_NAME的私人文件中。 通常,共享操作提供程序将所有历史记录存储在此单个文件中。 但是,如果共享操作提供程序用于不同类型的内容,则使用单一排名可能没有意义。 例如,如果活动有时共享图像并且有时共享联系人,则您需要维护两组不同的排名。

要设置历史文件,请调用setShareHistoryFileName()并传递XML文件的名称。 您指定的文件将一直使用,直到您下次拨打电话setShareHistoryFileName()

也可以看看:

Summary

Nested classes

interface ShareActionProvider.OnShareTargetSelectedListener

听众选择股票目标的事件。

Constants

String DEFAULT_SHARE_HISTORY_FILE_NAME

存储共享历史记录的默认名称。

Public constructors

ShareActionProvider(Context context)

创建一个新的实例。

Public methods

boolean hasSubMenu()

确定此ActionProvider是否具有与其关联的子菜单。

View onCreateActionView()

用于创建新操作视图的工厂方法。

void onPrepareSubMenu(SubMenu subMenu)

调用以为由此ActionProvider支持的菜单项准备相关的子菜单。

void setOnShareTargetSelectedListener(ShareActionProvider.OnShareTargetSelectedListener listener)

设置一个侦听器,以便在共享目标被选中时得到通知。

void setShareHistoryFileName(String shareHistoryFile)

设置文件的文件名以保存历史记录将用于排序共享目标的共享历史记录。

void setShareIntent(Intent shareIntent)

使用有关共享操作的信息设置意图。

Inherited methods

From class android.support.v4.view.ActionProvider
From class java.lang.Object

Constants

DEFAULT_SHARE_HISTORY_FILE_NAME

String DEFAULT_SHARE_HISTORY_FILE_NAME

存储共享历史记录的默认名称。

常量值:“share_history.xml”

Public constructors

ShareActionProvider

ShareActionProvider (Context context)

创建一个新的实例。

Parameters
context Context: Context for accessing resources.

Public methods

hasSubMenu

boolean hasSubMenu ()

确定此ActionProvider是否具有与其关联的子菜单。

关联的子菜单将在操作视图不显示时显示。 在向onPrepareSubMenu(SubMenu)的呼叫onPerformDefaultAction()以及向用户显示子菜单之前,此提供者实例将接收到对onPrepareSubMenu(SubMenu)的呼叫。

Returns
boolean true if the item backed by this provider should have an associated submenu

onCreateActionView

View onCreateActionView ()

用于创建新操作视图的工厂方法。

Returns
View A new action view.

onPrepareSubMenu

void onPrepareSubMenu (SubMenu subMenu)

调用以为由此ActionProvider支持的菜单项准备相关的子菜单。

如果hasSubMenu()返回true,则在选择菜单项准备用于呈现给用户的子菜单时将调用此方法。 应用程序可以使用它在显示之前创建或更改子菜单内容。

Parameters
subMenu SubMenu: Submenu that will be displayed

setOnShareTargetSelectedListener

void setOnShareTargetSelectedListener (ShareActionProvider.OnShareTargetSelectedListener listener)

设置一个侦听器,以便在共享目标被选中时得到通知。 侦听器可以选择决定处理选择,而不依赖于启动活动的默认行为。

注意:如果您选择后台共享历史记录文件,您仍将在此回调中收到通知。

Parameters
listener ShareActionProvider.OnShareTargetSelectedListener: The listener.

setShareHistoryFileName

void setShareHistoryFileName (String shareHistoryFile)

设置文件的文件名以保存历史记录将用于排序共享目标的共享历史记录。 该文件将用于由onCreateActionView()创建的所有视图。 默认为DEFAULT_SHARE_HISTORY_FILE_NAME 如果共享历史记录不应在会话之间持续存在,请设置为null

注意:历史文件名可以随时设置,但是只有在设置文件名后由onCreateActionView()创建的操作视图才会被提供的文件支持。 因此,如果要使用不同的历史记录文件来共享特定类型的内容,则每次使用setShareHistoryFileName(String)更改历史记录文件时,都必须调用supportInvalidateOptionsMenu()来重新创建操作视图。 应该叫supportInvalidateOptionsMenu()onCreateOptionsMenu(Menu)

 private void doShare(Intent intent) {
     if (IMAGE.equals(intent.getMimeType())) {
         mShareActionProvider.setHistoryFileName(SHARE_IMAGE_HISTORY_FILE_NAME);
     } else if (TEXT.equals(intent.getMimeType())) {
         mShareActionProvider.setHistoryFileName(SHARE_TEXT_HISTORY_FILE_NAME);
     }
     mShareActionProvider.setIntent(intent);
     supportInvalidateOptionsMenu();
 }
 

Parameters
shareHistoryFile String: The share history file name.

setShareIntent

void setShareIntent (Intent shareIntent)

使用有关共享操作的信息设置意图。 以下是构建共享意向的示例:

  Intent shareIntent = new Intent(Intent.ACTION_SEND);
  shareIntent.setType("image/*");
  Uri uri = Uri.fromFile(new File(getFilesDir(), "foo.jpg"));
  shareIntent.putExtra(Intent.EXTRA_STREAM, uri.toString());
 

Parameters
shareIntent Intent: The share intent.

也可以看看:

Hooray!