如何隐藏共享操作提供程序附近的共享操作(最常用)图标?

时间:2013-04-02 03:16:19

标签: android android-actionbar actionbarsherlock shareactionprovider

见图。如何隐藏图标“P”,这意味着分享到Pinterest?

enter image description here

它们都在操作栏上,我使用ActionBarSherlock。

3 个答案:

答案 0 :(得分:12)

如果您希望保留所有共享历史数据模型,但只是不希望额外的“默认共享活动”icom。 How do you turn off share history when using ShareActionProvider?的答案还不够好。

你应该做的是:

  • 将这些类从ActionBarSherlock复制到项目代码中
    • ShareActionProvider.java
    • ActivityChooserView.java
  • 在您的ShareActionProvider.java类中,导入刚刚复制的ActivityChooserView.java而不是ActionBarShelock文件位置
  • 在ActivityChooserView.java上 -
    • 找到第if (activityCount > 0 && historySize > 0)
    • 将此行替换为if (false) (这非常难看,但这是最快的修复。您可以深入研究代码以删除所有出现的DefaultActivity实现)

编辑: 不要忘记将新的ActionProvider设置为菜单项,从XML看起来如下:android:actionProviderClass="com.*.CustomShareActionProvider"

就是这样!

答案 1 :(得分:12)

我找到了解决这个问题的方法。我正在使用支持库23.0.1,我没有在其他支持库版本上测试过它。

解决方案很简单,当您创建ShareActionProvider时,只需覆盖onCreateActionView()方法并为其返回null。然后,您可以在弹出菜单中跟踪所有历史记录,但历史记录不会显示在工具栏中。

以下是代码示例:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuItem item = menu.add(Menu.NONE, R.id.menu_share, Menu.NONE, R.string.share);
    item.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
    mShareActionProvider = new ShareActionProvider(this) {
        @Override
        public View onCreateActionView() {
            return null;
        }
    };
    item.setIcon(R.drawable.abc_ic_menu_share_mtrl_alpha);
    MenuItemCompat.setActionProvider(item, mShareActionProvider);
    return true;
}

目前我没有发现使用此工作的任何问题。

答案 2 :(得分:4)

根据Sean的回答,我创建了必要的类,您可以将它们复制到项目中(https://gist.github.com/saulpower/10557956)。这不仅可以添加关闭历史记录的功能,还可以过滤您想要共享的应用程序(如果您知道包名称)。

private final String[] INTENT_FILTER = new String[] {
        "com.twitter.android",
        "com.facebook.katana"
};

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.journal_entry_menu, menu);

    // Set up ShareActionProvider's default share intent
    MenuItem shareItem = menu.findItem(R.id.action_share);

    if (shareItem instanceof SupportMenuItem) {
        mShareActionProvider = new ShareActionProvider(this);
        mShareActionProvider.setShareIntent(ShareUtils.share(mJournalEntry));
        mShareActionProvider.setIntentFilter(Arrays.asList(INTENT_FILTER));
        mShareActionProvider.setShowHistory(false);
        ((SupportMenuItem) shareItem).setSupportActionProvider(mShareActionProvider);
    }

    return super.onCreateOptionsMenu(menu);
}