在Android中没有任何操作栏的ShareActionProvider

时间:2013-07-22 15:50:01

标签: android android-layout android-intent android-actionbar

我不想在我的应用中使用操作栏,但仍希望拥有操作栏提供的共享按钮。

当操作栏出现时,即可完成。

public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.main, menu);
    ShareActionProvider provider = (ShareActionProvider)
    menu.findItem(R.id.menu_share).getActionProvider();

    if (provider != null) {
        Intent shareIntent = new Intent();
        shareIntent.setAction(Intent.ACTION_SEND);
        shareIntent.putExtra(Intent.EXTRA_TEXT, "hi");
        shareIntent.setType("text/plain");
        provider.setShareIntent(shareIntent);
    }

    return true;
}

menu.xml保存在菜单文件夹中。

我想在xml中使用我自己的分享按钮,其中还定义了其他布局。

任何帮助?

3 个答案:

答案 0 :(得分:8)

您不需要操作栏来共享内容。事实上,即使使用操作栏,大多数应用程序都不使用ShareActionProvider,因为视觉设计师讨厌它并且它不支持用户设备上的许多最新共享功能(例如直接共享给联系人) 。相反,您应该使用Intent.createChooser来创建更强大的共享对话框。

Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
sendIntent.setType("text/plain");
startActivity(Intent.createChooser(sendIntent, getResources().getText(R.string.send_to)));

http://developer.android.com/training/sharing/send.html

从应用中的任何位置分享更好的方法是使用ShareCompat。这是一个简单的例子:

ShareCompat.IntentBuilder.from(this)
           .setType("text/plain")
           .setText("I'm sharing!")
           .startChooser();

其他示例可在此处找到:https://android.googlesource.com/platform/development/+/master/samples/Support4Demos/src/com/example/android/supportv4/app/SharingSupport.java

答案 1 :(得分:5)

使用PackageManagerqueryIntentActivities()查找知道如何处理您要调用的ACTION_SEND Intent的应用。根据需要显示结果列表。当用户进行选择时,请创建等效的ACTION_SEND Intent,您可以在其中指定用户选择的特定活动的ComponentName,并致电startActivity()

答案 2 :(得分:1)

对ACTION_SEND使用意图。例如,单击按钮时,您可以:

Intent It = new Intent(Intent.ACTION_SEND);
It.setType("text/plain");
It.putExtra(android.content.Intent.EXTRA_TEXT,"your_text_to_share");
YourActivity.this.startActivity(It);