public class ShareActionProvider
extends ActionProvider
java.lang.Object | ||
↳ | android.support.v4.view.ActionProvider | |
↳ | android.support.v7.widget.ShareActionProvider |
提供适用于活动应用栏的分享操作。 创建启用数据共享的视图。 如果供应商出现在溢出菜单中,它将创建一个具有适当共享操作的子菜单。
要将“分享”操作添加到您的活动中,请将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()
创建此意图,并在每次共享内容更改时更新它。 建立意图:
getActionProvider()
and passing the share action's MenuItem
. For example: MenuItem shareItem = menu.findItem(R.id.action_share); ShareActionProvider myShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(shareItem);
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);
setShareIntent()
to attach this intent to the action provider: myShareActionProvider.setShareIntent(myShareIntent);
setShareIntent()
again. For example: // Image has changed! Update the intent: myShareIntent.putExtra(Intent.EXTRA_STREAM, myNewImageUri); myShareActionProvider.setShareIntent(myShareIntent);
基于用户选择每个目标的频率,共享操作提供程序会为每个共享目标保留一个排名。 用户选择目标的频率越高,排名越高; 最常用的目标会出现在应用程序栏中作为默认目标。
默认情况下,目标排名信息存储在名称为DEFAULT_SHARE_HISTORY_FILE_NAME
的私人文件中。 通常,共享操作提供程序将所有历史记录存储在此单个文件中。 但是,如果共享操作提供程序用于不同类型的内容,则使用单一排名可能没有意义。 例如,如果活动有时共享图像并且有时共享联系人,则您需要维护两组不同的排名。
要设置历史文件,请调用setShareHistoryFileName()
并传递XML文件的名称。 您指定的文件将一直使用,直到您下次拨打电话setShareHistoryFileName()
。
也可以看看:
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
|
String DEFAULT_SHARE_HISTORY_FILE_NAME
存储共享历史记录的默认名称。
常量值:“share_history.xml”
ShareActionProvider (Context context)
创建一个新的实例。
Parameters | |
---|---|
context |
Context : Context for accessing resources. |
boolean hasSubMenu ()
确定此ActionProvider是否具有与其关联的子菜单。
关联的子菜单将在操作视图不显示时显示。 在向onPrepareSubMenu(SubMenu)
的呼叫onPerformDefaultAction()
以及向用户显示子菜单之前,此提供者实例将接收到对onPrepareSubMenu(SubMenu)
的呼叫。
Returns | |
---|---|
boolean |
true if the item backed by this provider should have an associated submenu |
void onPrepareSubMenu (SubMenu subMenu)
调用以为由此ActionProvider支持的菜单项准备相关的子菜单。
如果hasSubMenu()
返回true,则在选择菜单项准备用于呈现给用户的子菜单时将调用此方法。 应用程序可以使用它在显示之前创建或更改子菜单内容。
Parameters | |
---|---|
subMenu |
SubMenu : Submenu that will be displayed |
void setOnShareTargetSelectedListener (ShareActionProvider.OnShareTargetSelectedListener listener)
设置一个侦听器,以便在共享目标被选中时得到通知。 侦听器可以选择决定处理选择,而不依赖于启动活动的默认行为。
注意:如果您选择后台共享历史记录文件,您仍将在此回调中收到通知。
Parameters | |
---|---|
listener |
ShareActionProvider.OnShareTargetSelectedListener : The listener. |
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. |
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. |
也可以看看: