对于带有ActionBarSherlock的ShareActionProvider,只有四个选项

时间:2012-06-04 20:30:35

标签: android android-actionbar actionbarsherlock shareactionprovider

我正在尝试通过ActionBarSherlock使用共享操作提供程序时共享纯文本,并且只有四个选项可以与之共享,并且没有“查看全部...”选项。

为什么?

这就是它的样子:

这就是我想要的样子:

2 个答案:

答案 0 :(得分:8)

好的,所以无论ActionBarSherlock首先进行测试,看看你是否正确创建了你的意图,ABS使用与通用选择器相同的代码,看看你执行此代码时是否显示你正在寻找的应用程序。

    Intent I= new Intent(Intent.ACTION_SEND);
    I.setType("text/plain");
    I.putExtra(android.content.Intent.EXTRA_TEXT, "My Test Text");

    startActivity(Intent.createChooser(I,"Share using ..."));

所有处理纯文本的应用程序都会显示,如果是facebook,或者你想要的任何东西都没有,那么这些应用程序不支持您已注册类型的ACTION_SEND意图(纯文本/文本)。 (Facebook确实如此,但一分钟内更多关于这一点)

ABS有一个使用共享操作提供程序的示例,但它尝试发送照片,而不是文本消息(状态更新)您应该使用的设置是这样的

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate your menu.
    getSupportMenuInflater().inflate(R.menu.share_action_provider, menu);

    // Set file with share history to the provider and set the share intent.
    MenuItem item = menu.findItem(R.id.menu_item_share_action_provider_action_bar);
    ShareActionProvider provider = (ShareActionProvider) item.getActionProvider();
                  provider.setShareHistoryFileName(ShareActionProvider.DEFAULT_SHARE_HISTORY_FILE_NAME);
    // Note that you can set/change the intent any time,
    // say when the user has selected an image.
    provider.setShareIntent(createShareIntent());

    return true
}

以下是用于匹配应用并将其从示例中列出的意图

private Intent createShareIntent() {
        Intent shareIntent = new Intent(Intent.ACTION_SEND);
        shareIntent.setType("image/plain");
        Uri uri = Uri.fromFile(getFileStreamPath("shared.png"));
        shareIntent.putExtra(Intent.EXTRA_STREAM, uri);
        shareIntent.putExtra(Intent.EXTRA_TITLE, "This is an android icon");
        return shareIntent;
    }

但你希望它是

private Intent createShareIntent() {
        Intent I= new Intent(Intent.ACTION_SEND);
        I.setType("text/plain");
        I.putExtra(android.content.Intent.EXTRA_SUBJECT, "TEST - Disregard");
        I.putExtra(android.content.Intent.EXTRA_TEXT, Uri.parse("http://noplace.com"));
    }

这应该在ABS中给出与我在上面的选择器显示的小测试存根中相同的列表。

现在是坏消息。 Facebook应用程序并不真正起作用,它会调出用户更新页面,但不会填写文本。这是一个又一次,再次破损,但我昨晚尝试了它,它失败了。这是facebook应用程序报告并接受的错误。您可以发布照片,但无法设置标题,请参阅How many times will Facebook break/fix this?

答案 1 :(得分:3)

请向未来的读者留言,ActionBarSherlock的ShareActionProvider不支持v4.1.0版本的溢出菜单。也许这可能会在将来更新。


以下是SampleList demo中的share_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="com.actionbarsherlock.widget.ShareActionProvider" />

    <!-- XXX: For now, ShareActionProviders must be displayed on the action bar -->
    <!--item android:id="@+id/menu_item_share_action_provider_overflow"
        android:showAsAction="never"
        android:title="@string/action_bar_share_with"
        android:actionProviderClass="com.actionbarsherlock.widget.ShareActionProvider" /-->

</menu>

这个信息的答案 - 我花了很长时间才发现这一点,所以我想让未来的读者更容易找到。