5

我想显示ShareActionProviderActionBar但具有自定义外观。只有一个简单的无边框共享图标,右侧没有最常用的应用程序图标。但是为最常用的应用程序提供弹出菜单。有没有一种简单的方法可以做到这一点而无需实现 own ShareActionProvider

4

1 回答 1

-1

好的,所以不管 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 中为您提供与上面选择器显示的小测试存根中相同的列表。

于 2013-02-07T07:27:01.253 回答